主要的思想是:
第一个与最后一个比较是否相同,以此类推。
每轮循环让前面的往后进,后面的往前进;
如果是回文,那么循环是可以走完的,最后j>=i;
如果中间出现了不相等的情况,直接跳出循环,最后j不满足j>=i的条件
以i与j的大小关系来判断是否是回文;
回文判断的代码如下:
#include<stdio.h>
int main(void){
int i,j;
char a[80];
while((a[i++]=getchar())!='\n');
a[--i]='\0';
j=0;
i=i-1;
while(j<i){
if(a[j]!=a[i]) {
break;
}
i--;
j++;
}
if(j>=i)
printf("YES");
else
printf("NO");
return 0;
}
利用回文判断简单说一下字符数组需要注意的点
当不知道该字符数组需要存储多少个字符时可以使用
方法一:
int i=0;
a[i]=getchar();
while(a[i]!='\n'){
i++;
a[i]=getchar();
}
先获得一个字符,由此进入循环,循环跳出的条件是输入回车;
方法二:
int i=0;
while((a[i]=getchar())!='\n'){
i++;
}
a[i]='\0';
虽然看起来不明显,但是a也是从a[0]开始存储的,对此有疑问的同学可以在循环后加上
printf("%d",s[0]); 测试一下;
想代码更加简洁的同学也可以这样写:
int i=0;
char a[i];
while((a[i++]=getchar())!='\n')
a[--i]='\0';
对于方法二做一些说明:
对于\n:
这里的\n可以理解为循环结束的标志,也就是输入结束的标志,无论后面再输入多少字符都不会再存储到数组中;
当然,这个结束的标志也可以换成别的字符,但是我们在运行窗口会发现输入回车之后会直接显示出结果,根本就没有输入多余字符的机会,这是由于在C语言中,使用DOS窗口输入数据时,长度满足函数要求且按下了回车键才能结束本次输入。如果长度满足(没有超出)没有按下回车键,系统会继续等待输入直到按下回车键。这同时也是我们将结束标志换成别的字符后依然需要按下回车键后才能显示输出结果的原因。
测试实例:
为了看起来比较明显,这里将结束标志换成0;
这里输入的字符 在0后面的都没有输入到字符数组中。
对于最后一位的\n换成\0:
\n是输入结束的标志,并不是需要存储的字符,所以将其替换成字符串结束符\0.