2014-12-03 132 views
1

我正在探索處理字符串和我有這個特定程序的一些問題。有人可以幫助解釋爲什麼以及如何運作x < i/2以及word[i - 1 - x]迴文C程序混亂

爲什麼一定要i/2
爲什麼它必須是word[i - 1 - x]

#include <stdio.h> 


int main() 
{ 
    char word[15]; 
    int i, x; 

    printf("Enter a word\n"); 
    scanf("%s", word); 

    for(i = 0; word[i] != '\0';) 
     i = i + 1; 


    for(x = 0; x< i/2; x++) 

     if(word[x] != word[i-1-x]) 
     {printf("Your word is not a palindrome\n");} 
     else 
     { 
      printf("Your word is a palindrome\n"); 
     } 


} 

回答

1

爲什麼它必須是i/2

它並不一定是這樣:i將工作太,但它不會是最佳。如果你已經從兩端檢查了所有字符對,並且字母相同直到字的中間,那麼其餘的檢查也會成功。

例如,考慮字"alula"。首先比較最初的a和最後的a,然後比較第二位的l到第二位的l,然後比較u。現在您已經到達i/2這個詞的中間了。如果你繼續,你會比較相同的字符對,但你會從不同的索引中挑選它們。確保所有這些對匹配,所以你可以通過完全跳過它們來節省一些CPU週期。

爲什麼它必須是word[i - 1 - x]

因爲陣列是基於零的。 i-1是最後一個字符的索引,因此i - 1 - x是從後面算起的第x個索引。

1

您正在比較字符串的一半。因此,對於i/2,您正在查看字符串的前半部分,而對於word[i - 1 - x],您將看到另一半字符串的「鏡像」位置。