刘大婶说这个比较难,哈哈,我感觉自己写的代码还是比较简单的.
#include<stdio.h> #include<string.h> #include<math.h> int is_palindrome(char x[],int n);//用于判断是否回文 //如果回文的话,返回值为1,反之为0 int is_mirrored(char x[],int n);//用于判断是否镜像 //同上 int main() { char a[11111]; int s1,q,w; while(scanf("%s",a)!=EOF) { s1=strlen(a); q=is_palindrome(a,s1); //传送过去的长度是实际长度 w=is_mirrored(a,s1); if(q==1) { if(w==1) printf("%s -- is a mirrored palindrome.",a); else printf("%s -- is a regular palindrome.",a); } else { if(w==1) printf("%s -- is a mirrored string.",a); else printf("%s -- is not a palindrome.",a); } printf(" "); } return 0; } int is_palindrome(char x[],int n)//判断是否回文 { int m,i,q=0; m=n/2; //实际长度 for(i=0;i<m;i++) { if(x[i]==x[n-1-i]) q++; } if(q==m) return 1; else return 0; } int is_mirrored(char x[],int n) { char a[]={"AEHIJLMOSTUVWXYZ12358"},b[]={"A3HILJMO2TUVWXY51SEZ8"}; int s1,q=0,j,m,i; if(n%2==0) //用于处理字符串的奇偶数. m=n/2; else m=(n/2)+1; s1=sizeof(a); for(i=0;i<m;i++) //一次一次的向下 传送 所输入的 字符 { for(j=0;j<s1;j++) //将上一个传送下来的字符 寻找一下看看有没有是镜像字符的 { if(x[i]==a[j]) //将输入的字符一个个的 和 镜像字符比较 { break; //如果有相同的就跳出去. } } if(j==s1) //不是镜像字符 return 0; else //发现了 它是镜像串中的字符 { if(x[n-1-i]==b[j])//用于判断左边的 是不是和它对应的镜像串. { q++; //用于记录有几对镜像字符. } } } if(q==m) return 1; // 所有的镜像字符都对上号了. else return 0; // 有的镜像字符不对号. }