[英]Palindrome C program confusion
我正在探索使用字符串的方法,对此特定程序有一些疑问。 有人可以帮助解释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");
}
}
您正在比较字符串的一半。 因此,对于i/2
您正在查看字符串的前半部分,而对于word[i - 1 - x]
您正在向前查看字符串的另一半的“镜像”位置。
为什么必须是
i/2
?
不一定要这样: i
也可以工作,但不是最佳选择 。 如果您已经检查了所有从两端到它的字符对,并且直到单词中间的字母都是相同的,那么其余的检查也将成功。
考虑例如单词"alula"
。 您可以通过最初的比较开始a
到最后a
,然后你比较l
在第二位置,以l
在从后面的第二位置,那么你比较u
本身。 现在您已经到达i/2
的单词中间。 如果继续,则将比较相同的字符对,但是将从不同的索引中选择它们。 确保所有这些对都将匹配,因此您可以通过完全跳过它们来节省一些CPU周期。
为什么必须是
word[i - 1 - x]
?
因为数组是从零开始的。 i-1
是最后一个字符的索引,因此i - 1 - x
是从背面开始计数的第x
个索引。
我假设您已在以下代码中将字符串存储在名为string的变量中,这是该函数的主要逻辑
注意:您也将for循环进行了legth / 2次的迭代,它将得到相同的结果
#include<stdio.h>
#include<string.h>
int main()
{
int i;
int flag=0;
for(i=0;i<strlen(string);i++)
{
if(string[i]==string[strlen(string)-i-1])
flag=1;
else
break;
}
if(flag==1)
printf("palindrome string");
else
printf("not palindrome string");
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.