Problem.png
每次輸入一行字符串(不含空格),判斷該字符串是否為回文串和鏡像串,分四種情況輸出。
注意回文串和鏡像串的判斷是獨立的,可以在一個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;
}
}
}