C++で回文のチェッカーを作成する方法


回文は、前から読んでも後ろから読んでも同じ結果になる文字列です。C++で回文をチェックするためのいくつかの方法を紹介します。

方法1: 反転して比較する方法 最も基本的な方法は、文字列を反転させて元の文字列と比較する方法です。以下は、この方法の例です。

#include <iostream>
#include <string>
bool isPalindrome(const std::string& str) {
    std::string reversedStr = str;
    std::reverse(reversedStr.begin(), reversedStr.end());
    return str == reversedStr;
}
int main() {
    std::string input;
    std::cout << "文字列を入力してください: ";
    std::cin >> input;
    if (isPalindrome(input)) {
        std::cout << "回文です" << std::endl;
    } else {
        std::cout << "回文ではありません" << std::endl;
    }
    return 0;
}

方法2: 前後からポインタを移動して比較する方法 もう一つの方法は、前後からポインタを移動させながら文字を比較する方法です。以下は、この方法の例です。

#include <iostream>
#include <string>
bool isPalindrome(const std::string& str) {
    int left = 0;
    int right = str.length() - 1;
    while (left < right) {
        if (str[left] != str[right]) {
            return false;
        }
        left++;
        right--;
    }
    return true;
}
int main() {
    std::string input;
    std::cout << "文字列を入力してください: ";
    std::cin >> input;
    if (isPalindrome(input)) {
        std::cout << "回文です" << std::endl;
    } else {
        std::cout << "回文ではありません" << std::endl;
    }
    return 0;
}

方法3: 再帰を使用する方法 さらに別の方法として、再帰を使用して回文をチェックする方法もあります。以下は、この方法の例です。

#include <iostream>
#include <string>
bool isPalindrome(const std::string& str, int left, int right) {
    if (left >= right) {
        return true;
    }
    if (str[left] != str[right]) {
        return false;
    }
    return isPalindrome(str, left + 1, right - 1);
}
int main() {
    std::string input;
    std::cout << "文字列を入力してください: ";
    std::cin >> input;
    if (isPalindrome(input, 0, input.length() - 1)) {
        std::cout << "回文です" << std::endl;
    } else {
        std::cout << "回文ではありません" << std::endl;
    }
    return 0;
}

これらの方法を使用して、C++で回文をチェックすることができます。どの方法を選ぶかは、自分の好みや特定の状況によります。それぞれの方法は効率的であり、正確な結果を提供します。