Palindrome C程序混乱

时间:2014-12-03 20:14:22

标签: c string palindrome

我正在探索使用字符串,我对这个特定程序有一些疑问。有人可以帮助解释x < i/2以及word[i - 1 - x]的工作原理和方式。

为什么必须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");
        }


}

3 个答案:

答案 0 :(得分:1)

你正在比较一半的字符串。因此,对于i/2,您正在查看字符串的前半部分,并且word[i - 1 - x]您正在查看另一半字符串的“镜像”位置。

答案 1 :(得分:1)

  

为什么必须是i/2

不一定是这样:i也可以,但它不是最佳。如果你已经检查过两端的所有字符对,并且字母在单词的中间是相同的,那么其余的检查也会成功。

例如考虑单词"alula"。首先将初始a与最后a进行比较,然后将第二个位置的l与后面第二个位置的l进行比较,然后比较{ {1}}对自己。现在你已经到了u的中间位置了。如果继续,您将比较相同的字符对,但您可以从不同的索引中选择它们。保证所有这些对都匹配,所以你可以通过完全跳过来节省一些CPU周期。

  

为什么必须是i/2

因为数组是从零开始的。 word[i - 1 - x]是最后一个字符的索引,因此i-1是从后面开始计算的i - 1 - x个索引。

答案 2 :(得分:0)

我假设您已在以下代码中将字符串存储在名为string的变量中,这是该函数的主要逻辑

注意:您也对for循环进行了legth / 2次迭代,它会得到相同的结果

undefined