用C++实现字符串的翻转
时间: 2024-09-27 20:06:36 浏览: 125
在C++中,有多种方法可以实现字符串的反转。这里提供一种常见的使用数组和迭代的方式:
```cpp
#include <iostream>
#include <cstring> // 使用memset函数
// 函数模板实现字符串反转
template <typename CharT>
void reverseString(CharT* str) {
if (str == nullptr || strlen(str) <= 1) return; // 防止空指针和长度为0或1的情况
int len = strlen(str);
for (int i = 0; i < len / 2; ++i) {
std::swap(str[i], str[len - i - 1]); // 交换字符
}
}
int main() {
char str[] = "Hello, World!";
reverseString(str);
std::cout << str << std::endl;
return 0;
}
```
在这个例子中,`reverseString`函数接受一个字符指针,通过两个指针分别从字符串的头和尾开始,逐个交换字符直到中间位置。这实现了字符串内容的反转。
相关问题
c++ stl字符串翻转
你可以使用C++的STL库中的`reverse`函数来翻转字符串。下面是一个示例代码:
```cpp
#include <iostream>
#include <string>
#include <algorithm>
int main() {
std::string str = "Hello, World!";
std::reverse(str.begin(), str.end());
std::cout << str << std::endl;
return 0;
}
```
运行以上代码,输出将会是`!dlroW ,olleH`,即翻转后的字符串。使用`std::reverse`函数可以方便地对字符串进行翻转操作。
c++部分字符串翻转
### C++ 中实现部分字符串翻转
在 C++ 中要实现部分字符串的翻转,可以通过指定起始和结束位置来操作子串。下面展示两种方式:一种是利用标准库 `std::reverse` 函数配合迭代器;另一种则是通过自定义逻辑逐位交换字符。
#### 使用 std::reverse 和 迭代器
当需要翻转特定范围内的字符时,可以直接调用 `<algorithm>` 头文件里的 `std::reverse()` 方法,并传递给它两个指向目标区间首尾元素之后位置的迭代器作为参数[^1]。
```cpp
#include <iostream>
#include <string>
#include <algorithm>
int main(){
std::string str = "hello world";
// 定义开始与结束的位置
size_t start_pos = 6;
size_t end_pos = 9;
if (start_pos >= str.size() || end_pos >= str.size()){
std::cout << "Invalid position." << std::endl;
return -1;
}
// 对[start_pos,end_pos]之间的字符进行反转
std::reverse(str.begin()+start_pos, str.begin()+end_pos+1);
std::cout<<str<<std::endl;
return 0;
}
```
这段程序会输出 `"hello dlrow"` ,因为只对索引从 6 到 9 的字符进行了逆序处理。
#### 手动编写函数完成局部翻转
如果不希望依赖于 STL 提供的功能,则可以自己创建一个简单的循环结构,在其中交替互换两端对应的字符直到中间相遇为止[^3]。
```cpp
void partialReverse(std::string& s, int startPos, int endPos){
while(startPos<endPos){
char tmp=s[startPos];
s[startPos]=s[endPos];
s[endPos]=tmp;
++startPos;
--endPos;
}
}
// 测试代码如下:
int main(){
std::string testStr="abcdefghijklmn";
// 假设我们要翻转第4到7个字符(即'e'-'h')
partialReverse(testStr, 4, 7);
std::cout<<testStr<<"\n";
return 0;
}
```
上述例子将会打印出 `"abcdhgfeijklmn"`,这表明原始字符串中 'e' 至 'h' 已经被成功颠倒顺序。
阅读全文
相关推荐
















