方法一:用栈存取前半截数,然后与后半截挨个比较。
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
int main(int argc,char* argv[])
{
char a[101],s[101];
int mid,len,top,i,next;
gets(a); //读入字符串
len=strlen(a);
mid=len/2-1; //求中间点
top=0;
for(i=0;i<=mid;i++) //将0到mid赋值,对于偶数,则正好是给前半段赋值
{ //若是奇数,则给前面len/2个数赋值,中间的数及后len/2个数未赋值
s[++top]=a[i];
}
if(len%2==0) //判断len是奇数还是偶数
next=mid+1; //若是偶数,则从mid+1开始与前面半段比较
else
next=mid+2; //若是奇数,则空过mid+1,从mid+2开始与前面半段比较
for(i=next;i<=len-1;i++)
{
if(a[i]!=s[top]) //若比较时,两数不等,则推出,此时top不可能为0
break;
top--; //若两数相等,则继续比较,top减一
}
if(top == 0) //若所有的数都相等,则此时的top会减到0,则是回文
printf("YES! 是回文!\n");
else
printf("NO! 不是回文!\n");
getchar();
}
方法二:用两个指针,分别指向第一个数和最后一个
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
int main(int argc,char* argv[])
{
char a[101];
int len,i,j;
gets(a);
len=strlen(a);
for(i=0,j=len-1;i<j;i++,j--)
{
if(a[i]!=a[j])
{
printf("NO\n");break;
}
}
if(i==len/2) //若是回文,对于偶数,i会加到len/2,j会减到len/2-1;
printf("YES\n"); //对于奇数, i会加到中间那个数,及len/2,j也是
system("pause");
}