2017-02-23 64 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提供了很好的例子。