我正在探索使用字符串,我对这个特定程序有一些疑问。有人可以帮助解释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");
}
}
答案 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