- 回文串判断
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 10010
#define ElemType int
void InitString(char s1[MAXSIZE]){
scanf("%s",s1);
}
void CheckIsSyn(char s1[MAXSIZE],int length){
//此处判断需要注意
//错误示例:
//int i=0,j=length-1;
//while(i<=(j-1)&&s1[i++]==s1[j--]);
//错误原因:比如字符串ababcaba,在比较最后两个字符b和c的时候
//此时b和c不相等,但是i和j在s1[i++]==s1[j--]处仍然执行了i++和j--
//导致下面的判断是仍然满足回文串条件(执行之后i>j,满足判断条件),所以出错了
//解决办法:先执行++i和--j(先移动下标,再进行判断)
//例如对于字符串ababcaba,在比较最后两个字符b和c的时候
//此时先分别移动i和j到b和c的位置,再判断,此时b和c不相等,退出循环
//执行下面判断条件的时候i仍然j,不满足(i>=j)
int i=-1,j=length;
//如果相同则继续比较下一个字符
while(s1[++i]==s1[--j]&&i<=(j-1));
if(i>=j&&length>0)
printf("该字符串是回文串\n");
else
printf("该字符串不是回文串\n");
}
int getLength(char s1[MAXSIZE]){
int length=0,index=0;
while(s1[index++]!='\0'){
length++;
}
return length;
}
int main(){
char s1[MAXSIZE];
printf("输入字符串:");
InitString(s1);
printf("存储字符串为:%s\n",s1);
int length=0;
length=getLength(s1);
printf("字符串长度为:%d\n",length);
printf("判断是否为回文串\n");
CheckIsSyn(s1,length);
return 0;
}