题目大意:输入一个字符,看它是否是 ① 镜像文 ② 回文 ③ 两者均是 ④ 两者均非,并输出相应的结果。
解题思路:设两个数组保存对应的镜像文,检查所输入的数组在对称位置的元素是否等于两个对应的镜像文字,判断镜像文;检查所输入的数组在对称位置的元素是否相等,判断回文。
#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
int main() {
char a[21] = { 'A', 'E', 'H', 'I', 'J', 'L', 'M', 'O', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '1', '2', '3', '5', '8'},
b[21] = { 'A', '3', 'H', 'I', 'L', 'J', 'M', 'O', '2', 'T', 'U', 'V', 'W', 'X', 'Y', '5', '1', 'S', 'E', 'Z', '8'},
user[25];
int i , j , mir , pa ;
while(scanf("%s",&user) != EOF) {
for( i = 0 ; i < strlen(user) ; i++ ) {
if( user[i] == user [ strlen(user) - i - 1 ]) { pa = 1;}
else {pa = 0;break;}
}
for( i = 0 ; i < strlen(user) ; i++ ) {
for( j = 0; j < 21 ; j++) {
if ( user[i] == a[j] && user[ strlen(user) - i - 1 ] == b[j]) {mir = 1;break;}
else { mir = 0;}
}
if(mir == 0) break;
}
if( pa ==0) {
if( mir == 0) cout << user << " -- is not a palindrome."<<endl;
else if ( mir == 1) cout << user << " -- is a mirrored string." << endl;
}
else {
if( mir == 0) cout << user << " -- is a regular palindrome."<<endl;
else if ( mir == 1) cout << user << " -- is a mirrored palindrome." << endl;
}
cout<< endl;
}
return 0;
}