Я пишу функцию, которая подсчитывает количество слов в файле. Слова могут быть разделены любым количеством пробельных символов. В файле могут быть целые числа, но программа должна учитывать только слова, имеющие хотя бы один алфавитный символ.Подсчет слов в файле в C
int word_count(const char *filename)
{
int ch;
int state;
int count = 0;
FILE *fileHandle;
if ((fileHandle = fopen(filename, "r")) == NULL){
return -1;
}
state = OUT;
count = 0;
while ((ch = fgetc(fileHandle)) != EOF){
if (isspace(ch))
state = OUT;
else if (state == OUT){
state = IN;
++count;
}
}
fclose(fileHandle);
return count;
}
Я понял, как иметь дело с пробелами, но я не знаю, как не считать комбинации, которые не имеют по крайней мере один буквенный символ (я знаю о IsAlpha и isdigit, но мне трудно понимание того, как использовать их в моем случае).
Я был бы очень признателен за вашу помощь.
Отделите каждое слово, проверив символы с помощью 'isalnum()', которые будут содержать алфавит и числовые значения. Затем проверьте слово, чтобы увидеть, имеет ли он хотя бы один алфавитный символ, используя 'isalpha()'. –
Чтобы избежать двух пропусков, предложенных @WeatherVane, вы можете иметь основной синтаксический разбор для разделения слов. Когда вы начинаете разбор нового слова, установите флаг в false. Во время разбора 'flag | = isalph (c)' Когда вы находите конец слова, увеличивайте, только если флаг установлен в true –
@ Ôrel Я просто держал его простым - разделяя задачи. –