[英]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.