2012-06-22 26 views
0

我在Ç編寫的程序行,找到與字符的最大數量。知道,最大的字符(C)

下面是代碼:

#include <stdio.h> 
#include <stdlib.h> 
#include <ctype.h> 
#include <string.h> 

int main (int argc, char *argv[]) 
{ 
    char c;        /* used to store the character with getc */ 
    int c_tot = 0, c_rig = 0, c_max = 0; /* counters of characters*/ 
    int r_tot = 0;      /* counters of rows */ 

    FILE *fptr; 

    fptr = fopen(argv[1], "r"); 

    if (fptr == NULL || argc != 2) 
    { 
     printf ("Error opening the file %s\n'", argv[1]); 
     exit(EXIT_FAILURE); 
    } 

    while ((c = getc(fptr)) != EOF) 
    { 
     if (c != ' ' && c != '\n') 
     { 
      c_tot++; 
      c_rig++; 
     } 

     if (c == '\n') 
     { 
      r_tot++; 

      if (c_rig > c_max) 
       c_max = c_rig; 

      c_rig = 0; 
     } 
    } 

    printf ("Total rows: %d\n", r_tot);   
    printf ("Total characters: %d\n", c_tot); 
    printf ("Total characters in a row: %d\n", c_max); 
    printf ("Average number of characters on a row: %d\n", (c_tot/r_tot)); 
    printf ("The row with max characters is: %s\n", ??????) 

    return 0; 
} 

我可以很容易地找到人物的最多的行,但我怎麼能打印說出來?

+0

我認爲在這裏說「行」而不是「行」會更準確。 –

+0

只是一個註釋:在你的while循環中,你將c的值與'\ n''的值比較兩次。您可以通過先移動行檢查並使用else子句來避免這種情況。在else子句中,你只需檢查'if(c!='')'。 – mlibby

+0

c應該是int,而不是char,因爲EOF不是char值。 –

回答

1

您需要存儲具有最高字符數的行,例如,在一個數組中。

如果你可以對線路長度的假設,聲明文字的兩個數組:

char currentLine[255]; 
char maxLine[255]; 

在閱讀每一個字符用getc,把它放在line陣列英寸處理該行後,如果當前行的計數較高,則使用memcpycurrentLine的內容複製到maxLine。您已經記錄了這兩個陣列的長度,分別爲c_totc_max

如果您不能對線條長度做出假設,您可以使用相同的技術,但當您遇到比您的初始尺寸更長的線時,您需要使用mallocrealloc緩衝器。

+0

如果我的「c = getc」位於我需要的行的底部,我該如何存儲該行? – Lc0rE

+0

你有c_rig來索引當前數組的位置。然後你使[c_rig] = c;不要忘記在最後添加\ 0。 – rlinden

0

您應該將當前行也存儲在char *中,並且其最大字符串爲char *。在確定最大大小的測試中,您還應該將當前行復制到最大的字符串。

不要忘記將最大的字符串初始化爲「」,以避免零長度文件情況下的錯誤。

相關問題