先把满足条件的字符存在一个数组中,在非扩展ASCII码中,char 最大127.
用大小为128的数组就够了.
int main()
{
char C[128];
C['A']='A',C['E']='3',C['H']='H',C['I']='I',C['J']='L',C['L']='J',C['M']='M';
C['O']='O',C['S']='2',C['T']='T',C['U']='U',C['V']='V',C['W']='W',C['X']='X';
C['Y']='Y',C['Z']='5',C['1']='1',C['2']='S',C['3']='E',C['5']='Z',C['8']='8';
char str[512];
while(gets(str)!=NULL)
{
int len=strlen(str),i,j,LEN=(len>>1);
for(i=0; i<len; i++)///题目说'0'和'O'认为是一样的
{
if(str[i]=='0')
str[i]='O';
}
bool _pa=1,_mi=1;
///判断回文数,比较规律为 0 <-> len-1;1 <->len-2;...;只需比到 (len-1)/2 <-> (len-1)/2 +1 的地方就行了
for(i=0,j=len-1; i<LEN; i++,j--)
{
if(str[i]!=str[j])
{
_pa=0;
break;
}
}
///判断镜面数,比较规律如上.但是注意 如果是奇数长度 必须比较中间那个, 比如是'B',没有镜面数.
for(i=0,j=len-1; i<=LEN; i++,j--)
{
if(C[str[i]]!=str[j])
{
_mi=0;
break;
}
}
char ans[8][64]= {" -- is not a palindrome."," -- is a regular palindrome."," -- is a mirrored string."," -- is a mirrored palindrome."};
int k;
if(_pa==0&&_mi==0) k=0;
if(_pa==1&&_mi==0) k=1;
if(_pa==0&&_mi==1) k=2;
if(_pa==1&&_mi==1) k=3;
printf("%s%s\n\n",str,ans[k]);
}
return 0;
}