簡體   English   中英

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

[英]How to find the length of the longest line of a text file in C

我知道這應該是易於實現的功能。 我需要解析一個.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. 正如Lashane指出的那樣,您可以使用strlen來獲得
    行中的字符。

  2. 刪除該三元語句。 您需要做的只是檢查chars是否大於longest ,如果是,則更新longest

  3. 不需要Hlen變量。 longest返回

  4. 獎勵:也不需要分配內存。 考慮一下,您實際上不需要保存行的副本,只需要遍歷文件的每個字符並計算換行符之間的字符。 您可以為此使用fgetc

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM