📅  最后修改于: 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
函数的实现方式。