簡體   English   中英

字符串最長

[英]Longest in string

#include <stdio.h>
#include <string.h>
int main()
{
    char string[100], word[20], max[20];
    int i = 0, j = 0, flag = 0;
    printf("Enter string: ");
    gets(string);
    for (i = 0; i < strlen(string); i++)
    {
        while (i < strlen(string) && string[i]!=32 && string[i]!=0)  //line 1
        {
            word[j++] = string[i++];
        }
        if (j != 0)
        {
            word[j] = '\0';
            if (!flag)
            {
                flag = !flag;
                strcpy(max, word);
            }
            if (strlen(word) > strlen(max))
            {
                strcpy(max, word);
            }
            j = 0;
        }
    }
    printf("The largest word is '%s' .\n", max);
    return 0;
}

我遇到了這個代碼,它找到給定字符串中最長的單詞,並在多次出現相同長度單詞的情況下返回最后一個單詞

(1)我不明白為什么輸出不依賴於max [],我的意思是最后我們打印max []中最長的單詞並且它的大小是max [20]但是即使對於非常大的單詞它也能提供正確的輸出,將其更改為max [10]也有效。

(2)在第1行中為什么我們測試string[i]!=0因為刪除它沒有效果,我們已經在while循環的第一部分測試了i < strlen(string) 但是當我嘗試string[i]!='\\0'我的某些輸入字符串輸出不正確。

我在哪里錯過了這兩個的邏輯?

@callyalater,我把max []放在word []和string []之前,但它對輸出沒有影響但是對於max [5]和輸入字符串“arrenhius等式很難破譯zxcvbnmlkjhgfdsaqwertyuiop”輸出是'arrenzxcvbnmlkjhgfdsaqwertyuiop'在線提供的編譯器鏈接但是對於max [10]工作正常,但在我的編譯器(dev c ++)中,輸出給出max [5]和max [10]的正確結果,這兩個都是'zxcvbnmasdfghjklqwertyuiop'。

char string[100], word[20], max[20];
int i = 0, j = 0, flag = 0;

過度運行max,將修改i或word

存儲器可以如下使用

+-------+-------------+-------+
| word  | max         | i     |
+-------+-------------+-------+

要么

+-------+-------------+-------+
| i     | max         | word  |
+-------+-------------+-------+

所以寫入超過20個字節到最大值,可以修改單詞,或者我 - 因為它超出了。

當您超出這些內存項時,您輸入未定義的行為,這可能有效(如您找到)或崩潰。

string[i] !=0可以防止其中一些失敗。

暫無
暫無

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

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