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

我可以很容易地找到字符数最多的行,但是如何打印出来呢?

4

2 回答 2

1

您需要将具有最高字符数的行存储在一个数组中。

如果您可以对行长做出假设,请声明两个字符数组:

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

用 读取每个字符后getc,将其放入line数组中。处理完该行后,如果当前行的计数较高,则将其内容复制currentLine到中maxLine,使用memcpy. 您已经将这两个数组的长度跟踪为c_totc_max

如果你不能对行长做出假设,你可以使用相同的技术,但是当你遇到比初始大小更长的行时,你需要malloc和你的缓冲区。realloc

于 2012-06-22T21:14:22.837 回答
0

您应该将当前行也存储在 a 中char *并具有最大的字符串char *。在确定最大大小的测试中,您还应该将当前行复制到最大的字符串。

不要忘记将最大的字符串初始化为“”,以避免在零长度文件的情况下出错。

于 2012-06-22T21:17:03.997 回答