2017-02-23 68 views
0

感谢您的关注。计算文件中字数,行数,字符数

我写了一段代码,用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.任何提示解决这个问题?

回答

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; 
} 
2

对于新单词,您正在使用两个分支(space,\t\n作为分隔符)。它连续的空白字符失败。

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

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