在C语言中统计文件中的单词数

3

我正在编写一个函数,用于计算文件中单词的数量。单词可以由任意数量的空格字符分隔。文件中可能有整数,但程序应该只计算至少包含一个字母字符的单词。

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,但在我的情况下我很难理解如何使用它们)。

如果您能帮忙解决这个问题,我将非常感激。


1
使用 isalnum() 函数将字符分离出来,该函数将保留字母和数字。然后使用 isalpha() 函数测试单词是否至少有一个字母字符。 - Weather Vane
2
为了避免@WeatherVane提出的两遍扫描,您可以有一个主要的解析器来分隔单词。当您开始解析新单词时,将标志设置为false。在解析期间,flag |= isalph(c)。当您发现单词结束时,请仅在标志设置为true时递增。 - Ôrel
@Ôrel 我只是简单地保持它的简洁性 - 分离任务。 - Weather Vane
1个回答

1

你可以直接替换:

else if (state == OUT){

使用:

else if (state == OUT && isalpha(ch)){

所以您将状态设置为IN在第一个字符并将其视为单词。 请注意,您将last.First视为单个单词,请考虑使用(!isalnum(ch))而不是(isspace(ch))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接