c++用数组判断回文
时间: 2024-11-22 11:34:27 浏览: 23
4.4.1.rar_数据结构_Visual_C++_
在C++中,判断一个字符串是否是回文(即正读和反读都一样)可以使用数组来存储字符串的一半字符,然后逐个比较对应位置的字符是否相等。以下是简单的步骤:
1. 定义一个数组 `char arr[]` 或 `std::array<char>` 来保存输入字符串的一部分,通常是前半部分或中间字符,具体取决于字符串长度。
```cpp
int n = strlen(s); // 获取字符串s的长度
if (n % 2 == 0) { // 如果字符串长度是偶数
arr = s.substr(0, n / 2);
} else {
arr = s.substr(0, n / 2); // 奇数长度的字符串,取前半部分
}
```
2. 创建另一个同样大小的数组用于存储反转后的字符,这样就可以方便地比较原数组中的字符和反转后的字符是否匹配。
```cpp
char reversed[n / 2];
for (int i = 0; i < n / 2; ++i) {
reversed[i] = arr[n - i - 1]; // 反转数组
}
```
3. 比较两个数组的内容,如果所有元素都匹配,则说明字符串是回文。
```cpp
bool isPalindrome = true;
for (int i = 0; i < n / 2; ++i) {
if (arr[i] != reversed[i]) {
isPalindrome = false;
break;
}
}
```
完整代码示例:
```cpp
#include <iostream>
#include <string>
bool isPalindrome(const std::string& s) {
int n = s.length();
if (n % 2 == 0) {
char half[n / 2];
for (int i = 0; i < n / 2; ++i) {
half[i] = s[i];
}
return compareArrays(half, s, n / 2);
} else {
char half[n / 2];
for (int i = 0; i < n / 2; ++i) {
half[i] = s[i];
}
half[n / 2] = s[n / 2]; // 添加中间字符到半数组
return compareArrays(half, s, n / 2 + 1);
}
}
bool compareArrays(char* arr1, const std::string& s, int len) {
for (int i = 0; i < len; ++i) {
if (arr1[i] != s[len - 1 - i]) {
return false;
}
}
return true;
}
int main() {
std::string str;
std::cout << "Enter a string: ";
std::cin >> str;
if (isPalindrome(str)) {
std::cout << str << " is a palindrome." << std::endl;
} else {
std::cout << str << " is not a palindrome." << std::endl;
}
return 0;
}
阅读全文