每次输入一行字符串(不含空格),判断该字符串是否为回文串和镜像串,分四种情况输出。
注意回文串和镜像串的判断是独立的,可以在一个for循环里用两个if分别判断。
获取某个字符所对应的reverse时,注意利用字符的ASCII码来计算下标会方便很多。
char getReverse(char ch) {
if (ch >= 'A' && ch <= 'Z') {
return reve[ch - 'A'];
}
else {
return reve[ch - '0' + 25];
}
}
将字符对应的reverse存成常量string
#include <string>
#include <iostream>
using namespace std;
string reve = "A###3##HIL#JM#O###2TUVWXY51SE#Z##8#";
// 利用字符的ASCII码来计算下标
char getReverse(char ch) {
if (ch >= 'A' && ch <= 'Z') {
return reve[ch - 'A'];
}
else {
return reve[ch - '0' + 25];
}
}
int main() {
string str;
while (cin >> str) {
bool mirror = true, palin = true;
int len = str.length();
for (int i = 0; i <= len / 2; i++) {
// 判断是否为回文串
if (str[i] != str[len - 1 - i]) {
palin = false;
}
// 判断是否为镜像串
if (getReverse(str[i]) != str[len - 1 - i]) {
mirror = false;
}
}
if (palin && mirror) {
cout << str << " -- is a mirrored palindrome." << endl << endl;
}
else if (palin && !mirror) {
cout << str << " -- is a regular palindrome." << endl << endl;
}
else if (!palin && mirror) {
cout << str << " -- is a mirrored string." << endl << endl;
}
else {
cout << str << " -- is not a palindrome." << endl << endl;
}
}
}