这题是个水题,用两个数组保存镜像字符比较合适。
#include <iostream>
#include<string.h>
#include<stdio.h>
using namespace std;
char *f_ch="AEHIJLMOSTUVWXYZ12358";
char *b_ch="A3HILJMO2TUVWXY51SEZ8";
bool is_mirrored(char *s,int len)
{
int len_ch=strlen(f_ch),i;
if(len==1)
{
for( i=0; i<len_ch; i++)
{
if(f_ch[i]==s[0])
break;
}
if(i==len_ch)
return 0;
else
return 1;
}
else
{
int j;
for(i=0; i<len/2; i++)
{
for( j=0; j<len_ch; j++)
{
if(s[i]==f_ch[j])
break;
}
if(j==len_ch||s[len-i-1]!=b_ch[j])
return 0;
}
return 1;
}
}
bool is_palindrome(char *s,int len)
{
for(int i=0; i<len/2; i++)
{
if(s[i]!=s[len-1-i])
return 0;
}
return 1;
}
int main()
{
char temp[500];
bool is_pa,is_mir;
while(cin>>temp)
{
int l=strlen(temp);
is_pa=is_palindrome(temp,l);
is_mir=is_mirrored(temp,l);
if(!is_pa&&!is_mir)
printf("%s -- is not a palindrome.\n\n",temp);
else if(is_pa&&!is_mir)
printf("%s -- is a regular palindrome.\n\n",temp);
else if(!is_pa&&is_mir)
printf("%s -- is a mirrored string.\n\n",temp);
else
printf("%s -- is a mirrored palindrome.\n\n",temp);
}
return 0;
}