【发布时间】:2015-04-21 12:47:05
【问题描述】:
我正在编写一个计算文件中字数的函数。单词可以由任意数量的空白字符分隔。文件中可以有整数,但程序应该只计算至少有一个字母字符的单词。
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 我只是保持简单 - 分离任务。