Просто прожуйте всю строку и создайте новую в более удобном формате. Там же, где вы делаете конверсию дела:
#include <ctype.h>
void format (char* dst, const char* src)
{
size_t i=0;
while(*src != '\0')
{
char ch = tolower(*src);
if(isalpha(ch))
{
*dst = ch;
dst++;
}
src++;
}
}
Если isalpha
недоступно по какой-либо искусственной причине, вы можете легко создать его самостоятельно. Вот быстрая, портативная версия справочной таблицы:
#include <stdbool.h>
bool my_isalpha (char ch)
{
static const bool ALLOWED[256] =
{
['A'] = true;
['B'] = true;
['C'] = true;
...
};
return ALLOWED[ch];
}
Наивные версии одной и той же функции просто проверяют if(ch >= 'A' && ch <= 'Z')
, предполагая только прописные буквы. Это, вероятно, нормально для студенческого задания, но не для производственного кода качества. Поскольку в стандарте C нет гарантии, что символы находятся рядом в таблице символов. И в любом случае версия справочной таблицы работает намного быстрее, поэтому нет причин не использовать ее в профессиональной программе.