2014-12-03 89 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],您将看到另一半字符串的“镜像”位置。