题意:一个字符串可以有两种属性,一个是否回文,一个是否镜像回文。
根据两种结果的组合有四种答案,对应四种输出。
而镜像回文在题中有给出条件。只要根据得出就可以了。
#include<stdio.h>
#include<string.h>
#include<string>
#include<iostream>
#include<map>
using namespace std;
map<char,char>m;
char str[1001];
int f1,f2;
void init()
{
m['E']='3';m['A']='A';
m['J']='L';m['H']='H';
m['S']='2';m['I']='I';
m['Z']='5';m['M']='M';
m['3']='E';m['O']='O';
m['L']='J';m['T']='T';
m['2']='S';m['U']='U';
m['5']='Z';m['V']='V';
m['W']='W';m['X']='X';
m['Y']='Y';m['1']='1';
m['8']='8';
}
void panduan()
{
f1=0,f2=0;
int len=strlen(str);
for(int i=0;i<len/2;i++)
{
if(str[i]!=str[len-1-i])
{
f1=1;
break;
}
}
for(int i=0;i<=len/2;i++)
{
char a,b;
a=str[i];
b=str[len-1-i];
if(m[a]!=b||m[a]==NULL||m[b]==NULL)
{
// printf("%c %c\n",a,b);
f2=1;
break;
}
}
}
int main()
{
init();
while(scanf("%s",str)!=EOF)
{
panduan();
// printf("%d %d\n",f1,f2);
printf("%s -- ",str);
if(f1==0&&f2==0)
puts("is a mirrored palindrome.");
if(f1==1&&f2==0)
puts("is a mirrored string.");
if(f1==1&&f2==1)
puts("is not a palindrome.");
if(f1==0&&f2==1)
puts("is a regular palindrome.");
printf("\n");
}
return 0;
}