详细题目描述见:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=342
输出表:
C++11代码如下:
#include<iostream>
#include<string.h>
#include<ctype.h>
using namespace std;
const char* rev = "A 3 HIL JM O 2TUVWXY51SE Z 8 "; //指针名可直接当数组名使用,均指代地址
const char* msg[] = { "not a palindrome","a regular palindrome", //二维数组,msg前面要加*
"a mirrored string","a mirrored palindrome" };
//四种组合:既不是回文也不是镜像、只是回文、只是镜像、既是回文又是镜像 char mirror(char ch) { //求字母或数字的镜像
if (isalpha(ch)) return rev[ch - 'A'];
return rev[ch - '' + ];
} int main() {
char s[];
while (cin >> s) {
int len = strlen(s);
int m = , p = ;
for (int i = ; i <= (len / ); i++) {
if (s[i] != s[len - - i]) p = ;
if (mirror(s[i]) != s[len - - i]) m = ;
}
cout << s << " -- is " << msg[m * + p] << '.' << endl << endl;
}
return ;
}