0

I have written a program in C, to find the row with the max number of characters.

Here is the code:

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

I can easily find the row with the highest number of characters but how can I print that out?

4

2 に答える 2

1

文字数が最も多い行を、たとえば配列に格納する必要があります。

行の長さを推測できる場合は、文字の 2 つの配列を宣言します。

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

で各文字を読み取っgetcたら、line配列に入れます。行を処理した後、現在の行のカウントが多い場合は、 を使用して の内容currentLineをにコピーします。これら 2 つの配列の長さは、およびとして既に追跡しています。maxLinememcpyc_totc_max

また、行の長さを推測できない場合は、同じ手法を使用できますが、最初のサイズよりも長い行に遭遇した場合は、バッファを使用する必要がmallocあります。realloc

于 2012-06-22T21:14:22.837 に答える
0

現在の行も a に格納しchar *、最大の string を持つ必要がありますchar *。最大サイズを決定するテストでは、現在の行を最大の文字列にコピーする必要もあります。

ファイルの長さがゼロの状況でのエラーを回避するために、最大の文字列を "" に初期化することを忘れないでください。

于 2012-06-22T21:17:03.997 に答える