C语言中的简单单词计数

时间:2019-03-20 19:08:59

标签: c file-io word-count

我正在c语言中创建一个单词计数函数,这是一个较大的文本文件处理程序的一部分,但结果却出现了一些差异。

下面是相关代码段:

#define OUT 0
#define IN  1
unsigned countWords(char * filename) {

    FILE * fp = fopen(filename, "r");
    int state = OUT;
    int wc = 0;
    char c;

    if(fp == NULL) {
        perror("Could not open file");
    }
    while((c = fgetc(fp)) != EOF) {
            printf("c: %c & wc: %d\n", c, wc);
        if(c == ' ' || c == '\n' || c == '\t') {
            state = OUT;
        }
        else if (state == OUT) {
            state = IN;
            ++wc;
        }
    }
    fclose(fp);
    return wc;
}

我正在用两个简短的.txt文件测试此功能:

word word word  word
word

和..

word word word
word 



请注意,在第二个.txt中,最后一个单词后面是3个换行符。

当我运行这些.txt文件时,第一个文件总是正确计数,返回5,但是第二个文件似乎正在读取文件末尾的3个换行符,并将计数增加到7。 / p>

我确定我遗漏了一些明显的东西,但我将不胜感激。

1 个答案:

答案 0 :(得分:1)

提示:如果将文本文件从Windows移到Unix系统计算机上,则可以始终在文件上运行dos2unix命令,而无需担心检查Windows系统使用的换行格式。