计算文件中的单词,行,字符的数量

时间:2017-02-23 03:46:29

标签: c

感谢您的关注。

我编写了一段代码,用C语言计算单词,行和字符的数量。

while((c = fgetc(fp)) != EOF)
{
    if((char)(c) == ' ' || (char)(c) == '\t'){
        num_word++;
        num_char++;
    }
    else if((char)(c) == '\n'){
        num_line++;
        num_word++;
        num_char++;
    }
    else{
        num_char++;
    }
}

除num_word外,一切正常。例如,如果测试用例有一个空行,则会再计算一次。

 example for test

 case

我的程序会计算5而不是4.任何提示都可以解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

您使用两个分支(space\t\n作为分隔符)来表示新单词。连续的空格字符无效。

要解决此问题,您可以跳过连续的空白字符(通过为其保留计数器或标志),或将新的非空白字符设置为新单词的开头。

K& R的C编程语言提供了很好的例子。

答案 1 :(得分:1)

你的字数是1,因为你有1个空行。如果您有2个空白行,那么它将是2个等等。这是因为你计算换行符的方式。如果有连续的换行符表示空行,那么你最容易做的就是不增加字数。

char lastChar = ' ';
while((c = fgetc(fp)) != EOF)
{
    if((char)(c) == ' ' || (char)(c) == '\t'){
        num_word++;
        num_char++;
    }
    else if((char)(c) == '\n'){
        num_line++;
        if(lastChar != '\n')
           num_word++;
        num_char++;
    }
    else{
        num_char++;
    }
    lastChar  = (char)c;
}