这道题的难点在于求镜像串,这道题一共会涉及到的字符共有26+9 个,镜像是用一个一维数组存起来的,要是这35个字符中有字符是镜像串,就把它的镜像字符存到这个一维数组中相应的位置,要是不是就用空格代替。
isalpha( x ),这个函数是用来判断 x 是不是英文字符。
相同的还有:isdigit( x ); 判断 x 是不是数字
这段代码在紫书上的49页
#include<stdio.h>
#include<ctype.h>
#include<string.h>
const char* msg[]={
"not a palindrome",//不是回文串 也不是 镜像串 0
"a regular palindrome",//是回文串 不是 镜像串 1
"a mirrored string",//不是回文串 是 镜像串 2
"a mirrored palindrome"//回文串 镜像串 3
};
char rev[]="A 3 HIL JM O 2TUVWXY51SE Z 8 ";
char mirr(char ch)
{
if(isalpha(ch)) return rev[ch-'A'];
return rev[ch-'0'+25];
}
int main()
{
char str[30];
while(scanf("%s",str)==1)
{
int len = strlen(str);
int p=1,m=1;
for(int i=0;i<(len+1)/2;i++)
{
if(str[i]!=str[len-1-i]){//判断是否是回文串
p=0;
}
if(mirr(str[i])!=str[len-1-i]){//判断是否是镜像串
m=0;
}
}
printf("%s -- is %s.
",str,msg[2*m+p]);
}
return 0;
}