数据结构——回文串判断(C语言)

    科技2024-04-06  87

    回文串判断 #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; }

    Processed: 0.010, SQL: 8