【问题标题】:Counting words in a file in C用C计算文件中的单词
【发布时间】: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 我只是保持简单 - 分离任务。

标签: c file-io fgetc


【解决方案1】:

你可以替换:

else if (state == OUT){

与:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-04
    • 2015-07-13
    相关资源
    最近更新 更多