401 - Palindromes

401 - Palindromes_第1张图片

401 - Palindromes_第2张图片
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 
#include 

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;
        }
    }
}

你可能感兴趣的:(401 - Palindromes)