簡體   English   中英

最長的字符串

[英]The longest string

我正在閱讀K&R C編程語言書並嘗試解決所有練習。

有一個示例程序可以在輸入中找到最長的字符串。 它基本上從輸入中逐個讀取字符串,並以預定義的長度存儲在數組中最長的字符串。 換句話說,它假定最長字符串長度的上限。

在此程序之后,有一個練習要求更改程序,使其不承擔長度的約束。 我不知道如何在不使用動態內存分配的情況下實現這一點(本書后面的章節對此進行了討論)。

如果我是正確的,在編譯期間定義C中的數組,因此除非我們動態分配內存,否則它們的長度是靜態的。

我假設你指的是第30頁的練習1.16。完整的陳述是

練習1-16。 修改最長行程序的主程序,以便正確打印任意長輸入行的長度,並盡可能多地打印文本。

如果長度是任意的,則無法返回整個字符串,因為您必須存儲它,這將需要動態內存分配。 但是,您可以稍微修改主例程,以便正確計算字符串的長度,並輸出“盡可能多”的文本,即最多固定長度。

這是一個可能的答案:

#define MAXLINE 1000 /* maximum input line size */

main() {
    int buf_len; /* current buffer length (<= MAXLINE) */
    int len = 0; /* current full line length */
    int max = 0; /* maximum length seen so far */
    char buffer[MAXLINE];  /* current input line */
    char line[MAXLINE];    /* prefix of longest-line candidate */
    char longest[MAXLINE]; /* longest line saved here */

    while ((buf_len = getline(buffer, MAXLINE)) > 0) {
        if (len == 0) /* this is the first chunk of the string */
            copy(line, buffer);
        len += buf_len;
        if (buf_len < MAXLINE || buffer[MAXLINE-2] == '\n') {
            /* the string was terminated */
            if (len > max) {
                max = len;
                copy(longest, line);
            }
            /* this line was fully processed */
            /* now reset len to 0 and process the next string */
            len = 0;
        }
    }
    if (max > 0)
        printf("%s", longest);
    return 0;
}

暫無
暫無

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

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