第一次做这个提的时候做了两三个小时没有做对,自己的方法海特啰嗦,看到书上有讲解,不得不服。
判断一个字符串是不是镜面回文串,分成两个部分,一个判断是回文,另一个是判断镜面,两个都符合那就是镜面回文,符合那个输出那个即可。
#include<stdio.h>
#include<string.h>
#include<ctype.h>
char rev[40]= {"A 3 HIL JM O 2TUVWXY51SE Z 8 "}; //对应的镜面字母
char mes[4][30]= {"is not a palindrome.",
"is a regular palindrome.",
"is a mirrored string.",
"is a mirrored palindrome."
};//方便输出
char s[1001];
char check(char ch)
{
if(isalpha(ch)) return rev[ch-'A'];//isalpha判断是否为字母,头文件为ctype.h。
return rev[ch-'0'+25];
}
int main()
{
int i,j,n,m;
while(gets(s))
{
int len=strlen(s);
n=1,m=1;
for(i=0; i<len/2+1; i++)
{
if(s[i]!=s[len-i-1]) n=0;//不是回文
if(check(s[i])!=s[len-i-1]) m=0;//不是镜面
}
printf("%s -- %s\n\n",s,mes[m*2+n]);
}
return 0;
}