用C计算文件中的单词
Counting words in a file in 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,但我很难理解如何在我的案例中使用它们)。
非常感谢您的帮助。
你可以只替换:
else if (state == OUT){
与:
else if (state == OUT && isalpha(ch)){
所以你在第一个字符处将状态设置为 IN
并将其计为单词。
请注意,您将 last.First
算作一个单词,请考虑使用 (!isalnum(ch))
而不是 (isspace(ch))
。
我正在编写一个函数来计算文件中的字数。单词可以由任意数量的空白字符分隔。文件中可以有整数,但程序应该只计算至少有一个字母字符的单词。
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,但我很难理解如何在我的案例中使用它们)。
非常感谢您的帮助。
你可以只替换:
else if (state == OUT){
与:
else if (state == OUT && isalpha(ch)){
所以你在第一个字符处将状态设置为 IN
并将其计为单词。
请注意,您将 last.First
算作一个单词,请考虑使用 (!isalnum(ch))
而不是 (isspace(ch))
。