//程序3-7 回文词
//收获:
//1、回文串和镜像串的判定(尤其镜像串,借用了一个常量数组)同时,用到了函数
//2、同时,这题的循环控制条件是有值得推敲之处,因为镜像串即便只剩下一个元素,还需要判定它的字符镜像是否是它本身
//3、此外,这题的结果输出,也是用了字符串数组,并且用到了2个变量jud1和jud2,利用两者的运算,成功地表示了所有的4种情况,十分巧妙
#include <iostream>
#include <cstring>
#include <cctype>
using namespace std;
const char* a = "A 3 HIL JM O 2TUVWXY51SE Z 8 ";
const char* mes[4] = {"is not a palindrome.", "is a regular palindrome.", "is a mirrored string.", "is a mirrored palindrome."};
char r(char ch)
{
if (isalpha(ch))
return a[ch - 'A'];
return a[25 + ch - '0'];
}
int main()
{
char s[20];
int jud1, jud2, len, i;
while (cin >> s)
{
len = strlen(s);
jud1 = jud2 = 1;//最开始,先当作又是回文数,又是镜像数
for (i = 0; i < (len + 1) / 2; i++)
{
if (s[i] != s[len - 1 - i]) jud1 = 0;
if (r(s[i]) != s[len - 1- i]) jud2 = 0;
}
cout << s << " -- " << mes[2 * jud2 + jud1] << endl << endl;
}
return 0;
}