如何在C中查找文本文件最长行的长度

时间:2015-12-01 21:53:54

标签: c parsing count

我知道这应该是一个容易实现的功能。我需要解析.txt文件并将其放入2D数组中。为了初始化2D数组,我需要知道最长行中的行数和字符数。我相信我有一个功能可以给我一些行数。我似乎无法使用我的函数来找到最长行的长度。

到目前为止,这是我的代码。我知道这是错误的(因为它不起作用)。

    int getrow(FILE *mapfile)
{
    int chars =0 ;
    int longest = 0;
    int Hlen;

    char *line;
    char *buf;

    line = malloc(1000);                //1000 is set to be max chars in line
    line = fgets(line, 1000, mapfile);  //get first line of file

    while(line)
    {
        chars = 0;
        buf = strtok(line, " ");
        while(buf)
        {
            chars++;
            buf = strtok(NULL, " ");
        }
        (chars > longest)?(longest = chars):(longest==longest); //If the number of characters scanned is longer than previous long, save new longest line
        line = fgets(line, 1000, mapfile);
    }
    Hlen = longest;
    free(line);

    return Hlen;
} 

我正在解析的文件是:

            ###################
            #       #        F####################################
            #   #  E#                                            #
            #   #####         ################################## #
            #                 #                                # #
############################  #################                # #
#                                             #                # #
#       ##################                    #                # #
#                        #####                #                # #
#      ###############       #                #                # #
#      #                     #                #                # #
###################  ##########################                # #
                #L                      #                      # #
                #             #     #   ######################## #
                #             #     #                            #
                ############  #     #   ##########################
                #             #     #   #
                #             #######   #
                #             #     #   #
                #             #     #   #
                #             #     #  S#
                #########################

1 个答案:

答案 0 :(得分:1)

  1. 正如Lashane所指出的,您可以使用strlen来获取数字 行中的字符。

  2. 删除该三元语句。您需要做的就是检查chars是否大于longest,如果是,请更新longest

  3. 无需Hlen变量。只需返回longest

  4. 奖励:还没有必要分配内存。想想看,你实际上并不需要保存该行的副本,只需要遍历文件的每个字符并计算换行符之间的字符。您可以使用fgetc进行此操作。