问题描述
输入一个字符串,判断它是否为回文以及镜像串。输入字符串保证不含数字0.所谓回文串,就是反转之后原串相同,如abba和madam。所谓镜像串,就是左右镜像之后和原串相同,如2S和3AIAE。注意,并不是每个字符在镜像之后都能得到一个合法字符,本题中,每个字符的镜像如下所示,(空白项表示该字符镜像后不能得到一个合法的字符)。
#
#include<stdio.h>
#include<ctype.h>
#include<string.h>
#define MAX 100
const char reverse[]={"A 3 HIL JM O 2TUVWXY51SE Z 8"};
const char *mes[]={"is not a palinadrome","is a regular palindrome","is a mirroed string","is a mirrored palindrome"};
//mes[0]不是回文串,mes[1]是回文串,mes[2] 是镜像串,mes[3]是镜像回文串
char r(char a)
{
if(isalpha(a)) return reverse[a-'A'];
else return reverse[a-'0'+25];
}
int main()
{
char s[MAX];
scanf("%s",s);
int len=strlen(s);
int ok=1;int ook=1;
for(int i=0;i<(len+1)/2;i++)
{
if(s[i]!=s[len-i-1]) ok=0; //不是回文串
if(r(s[i])!=s[len-i-1]) ook=0; //不是镜像串
}
printf("%s -- %s.\n\n",s,mes[ok+ook*2]);
return 1;
}