编写函数void reverse(string &s),用递归算法使字符串s倒序
时间: 2023-03-23 11:01:46 浏览: 268
好的,我可以回答你的问题。
您的问题是关于编写一个函数来反转字符串的。下面是一个可能的实现:
```cpp
void reverse(string& str) {
int left = 0, right = str.length() - 1;
while (left < right) {
swap(str[left], str[right]);
left++;
right--;
}
}
```
这个函数接受一个字符串作为参数,并通过将字符串中的字符从左到右交换来反转字符串。
例如,如果您调用该函数并将字符串 "hello" 作为参数传递,它将修改该字符串,使其成为 "olleh"。
相关问题
编写函数void reverse(string&s),用递归算法使字符串s倒序
好的,下面是函数的实现:
```c++
void reverse(string& s) {
if (s.empty()) {
return;
}
char first = s[0];
s.erase(0, 1);
reverse(s);
s += first;
}
```
这个函数使用了递归算法,首先判断字符串是否为空,如果是空字符串则不做处理,否则取出第一个字符,将其从字符串中删除,然后递归调用 `reverse` 函数,最后将第一个字符加到字符串的末尾,实现字符串的倒序。
倒序问题:编写函数void reverse(string &s),用递归算法实现字符串s倒序,并编写主函数完成输入输出。
递归法实现字符串反转是一个经典的编程练习。下面是一个用 C++ 实现的例子:
```cpp
#include <iostream>
#include <string>
// 递归函数,接收引用类型的字符串作为参数
void reverseStringRecursion(std::string &s, int start = 0) {
// 递归基本情况:当起始索引大于等于字符串长度的一半时,返回,停止递归
if (start >= s.length() / 2) {
return;
}
// 交换起始位置和结束位置的字符,然后继续递归处理剩余部分
char temp = s[start];
s[start] = s[s.length() - 1 - start]; // 或者直接 s[start] = s.back(); 利用 back() 函数
s[s.length() - 1 - start] = temp;
// 递归调用自身,更新起始索引
reverseStringRecursion(s, start + 1);
}
// 主函数,用于接收用户输入并调用递归函数
int main() {
std::string input;
std::cout << "请输入一个字符串: ";
getline(std::cin, input); // 使用 getline 获取包括空格的完整行
// 调用 reverseStringRecursion 函数
reverseStringRecursion(input);
std::cout << "反转后的字符串: " << input << std::endl;
return 0;
}
```
当你运行这个程序时,它会提示你输入一个字符串,然后输出其倒序版本。注意,递归操作可能会因为字符串太长而导致栈溢出,所以在实际应用中需要考虑这种情况。
阅读全文
相关推荐













