我正在探索使用字符串,我对这个特定程序有一些疑问。有人可以帮助解释为什么以及如何 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");
}
}
最佳答案
Why does it have to be
i/2
?
不一定非要这样:i
也可以,但不是最佳。如果您已经检查了从两端到它的所有字符对,并且字母直到单词的中间都是相同的,那么其余的检查也会成功。
例如考虑单词“alula”
。您首先将初始 a
与最后一个 a
进行比较,然后将第二个位置的 l
与 l
进行比较在从后面数第二个位置,然后将 u
与它自己进行比较。现在您已经到达了 i/2
处的单词的中间。如果你继续,你会比较相同的字符对,但你会从不同的索引中挑选它们。保证所有这些对都会匹配,因此您可以通过完全跳过它们来节省一些 CPU 周期。
Why does it have to be
word[i - 1 - x]
?
因为数组是从零开始的。 i-1
是最后一个字符的索引,因此 i - 1 - x
是从后面数起的第 x
个索引。
关于c - 回文C程序困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27280785/