📌  相关文章
📜  检查字符串是否为回文 cpp - C++ (1)

📅  最后修改于: 2023-12-03 14:55:45.691000             🧑  作者: Mango

检查字符串是否为回文

在 C++ 中检查字符串是否为回文需要判断字符串的首尾字符是否相等。

下面是一个简单的代码示例:

#include <iostream>
#include <cstring>

using namespace std;

bool is_palindrome(char* str) {
    int len = strlen(str);
    for (int i = 0; i < len/2; i++) {
        if (str[i] != str[len-i-1]) {
            return false;
        }
    }
    return true;
}

int main() {
    char str1[] = "hello";
    char str2[] = "level";
    cout << "str1 is " << (is_palindrome(str1) ? "palindrome" : "not palindrome") << endl;
    cout << "str2 is " << (is_palindrome(str2) ? "palindrome" : "not palindrome") << endl;
    return 0;
}

上面的代码中定义了一个 is_palindrome 函数来判断字符串是否为回文。该函数首先获取字符串的长度,然后从字符串的首尾进行比较,如果存在不相等的字符则返回 false,如果全都相等则返回 true

接着在 main 函数中定义两个字符串,一个为非回文字符串 "hello",另一个为回文字符串 "level",并分别调用 is_palindrome 函数进行测试。

代码输出结果如下:

str1 is not palindrome
str2 is palindrome

此外,还可以使用 STL 中的算法 std::equal 来判断字符串是否为回文,代码示例如下:

#include <iostream>
#include <algorithm>
#include <cstring>

using namespace std;

bool is_palindrome(char* str) {
    int len = strlen(str);
    return std::equal(str, str + len/2, str + len - 1, std::equal_to<char>());
}

int main() {
    char str1[] = "hello";
    char str2[] = "level";
    cout << "str1 is " << (is_palindrome(str1) ? "palindrome" : "not palindrome") << endl;
    cout << "str2 is " << (is_palindrome(str2) ? "palindrome" : "not palindrome") << endl;
    return 0;
}

上面的代码中,std::equal 函数接受四个参数:源区间的起始和结束迭代器以及目标区间的起始迭代器和比较函数,这里使用 std::equal_to 函数对象来比较字符是否相等。函数返回 true 表示字符串是回文,返回 false 表示不是回文。

需要注意的是,根据 cplusplus.com 的描述,std::equal 函数容易受到迭代器的实现细节以及编译器的优化等因素的影响,如果要保证正确性,最好使用 is_palindrome 函数的实现方式。