1.c++ 设计一个将任意输入的字符串倒置的递归和非递归的算法。例如,输入序列为“abcdefgh”,输出序列为“hgfedcba”。
时间: 2024-09-29 09:04:55 浏览: 47
C++基于递归和非递归算法求二叉树镜像的方法
5星 · 资源好评率100%
在 C++ 中,我们可以使用递归和非递归两种方法来实现字符串倒置。
**递归法:**
```cpp
#include <iostream>
#include <string>
// 递归函数,接收字符串指针作为参数
std::string reverseStringRecursively(const std::string& str, int start = 0) {
if (start >= str.length()) return "";
return reverseStringRecursively(str, start + 1) + str[start]; // 交换首尾字符并递归处理剩余部分
}
int main() {
std::string input = "abcdefgh";
std::string reversed = reverseStringRecursively(input);
std::cout << "Reversed string using recursion: " << reversed << std::endl;
return 0;
}
```
**非递归法(双指针法):**
```cpp
#include <iostream>
#include <string>
std::string reverseStringIteratively(const std::string& str) {
std::string reversed = "";
int start = 0, end = str.length() - 1; // 双指针,一个指向开始,另一个指向结束
while (start < end) {
reversed += str[end]; // 将当前尾部字符添加到结果
end--;
reversed += str[start]; // 然后移动到下一个字符
start++;
}
if (start == end) // 如果两个指针相遇,则说明字符串已经反转,无需再添加
reversed += str[start];
return reversed;
}
int main() {
std::string input = "abcdefgh";
std::string reversed = reverseStringIteratively(input);
std::cout << "Reversed string using iteration: " << reversed << std::endl;
return 0;
}
```
在这两个例子中,输入 `"abcdefgh"` 的输出分别是:
1. 使用递归法:`"hgfedcba"`
2. 使用迭代法:`"hgfedcba"`
阅读全文