C++中STL的字符串反转

本文介绍了如何在C++中使用STL库中的std::reverse()函数反转字符串,以及一个实际例子,展示了如何反转部分字符串。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C++中STL的字符串反转

有时需要反转字符串的内容。假设要判断用户输入的字符串是否为回文,方法之一是将其反转,
再与原来的字符串进行比较。反转 STL string 很容易,只需使用泛型算法 std::reverse():

string sampleStr ("Hello String! We will reverse you!");
reverse (sampleStr.begin (), sampleStr.end ());

程序清单 16.6 演示了如何将算法 std::reverse()用于 std::string。
程序清单 16.6 使用 std::reverse 反转 STL string

0: #include <string>
1: #include <iostream>
2: #include <algorithm>
3:
4: int main ()
5: {
6: using namespace std;
7:
8: string sampleStr ("Hello String! We will reverse you!");
9: cout << "The original sample string is: " << endl;
10: cout << sampleStr << endl << endl;
11:
12: reverse (sampleStr.begin (), sampleStr.end ());
13:
14: cout << "After applying the std::reverse algorithm: " << endl;
15: cout << sampleStr << endl;
16:
17: return 0;
18: }
### C++ STL `string` 的基本操作与高级技巧 #### 基本概念 C++ 标准模板库(STL)中的 `std::string` 是一种用于表示和操作字符串的对象类型。它提供了丰富的成员函数来支持各种常见的字符串操作,同时也允许通过迭代器访问其内部存储的内容。 以下是有关 `std::string` 的一些常见操作及其用法: --- #### 创建与初始化 可以通过多种方式创建并初始化一个 `std::string` 对象: - 使用默认构造函数创建空字符串。 - 从常量字符指针或字面量初始化。 - 指定重复次数和单个字符构建字符串。 - 利用初始值列表进行初始化。 需要注意的是,尝试以单一字符直接初始化字符串会导致编译错误[^3]。例如: ```cpp // 错误示例 string a('a'); // 编译失败 // 正确写法 string b(1, 'a'); // 构造包含一个'a'的字符串 string c({ 'a' }); // 使用初始值列表 ``` --- #### 字符串连接 `std::string` 提供了重载运算符 `operator+=` 来实现字符串追加功能。此操作会将右侧参数附加到左侧字符串末尾,并返回修改后的对象本身作为结果以便链式调用[^2]。 下面是一个简单的例子展示如何利用该特性完成自我复制效果: ```cpp #include <iostream> #include <string> int main() { std::string s1 = "hello world"; std::cout << s1 << std::endl; s1 += s1; // 将自身再次拼接到后面 std::cout << s1 << std::endl; return 0; } ``` 上述代码执行后输出如下两行文字: ``` hello world hello worldhello world ``` --- #### 子串提取 为了获取某个范围内的子序列部分,可采用 member function `substr(size_t pos = 0, size_t len = npos)` 。其中 `pos` 表明起始位置索引而 `len` 控制截取长度;如果未指定后者或者超出实际剩余数量,则一直延续到最后一位为止[^1]。 实例演示: ```cpp #include <iostream> #include <string> int main(){ std::string str = "The quick brown fox jumps over the lazy dog."; try{ std::string subStr = str.substr(4 ,5); std::cout<<subStr<<"\n"; // 如果越界则抛出out_of_range exception std::string invalidSubstr = str.substr(str.size()+1, 1); } catch(const std::exception& e){ std::cerr<<"Exception caught: "<<e.what()<<'\n'; } return 0; } ``` 当运行这段程序时,正常情况下应该打印单词 `"quick"` ,但如果请求非法区间就会触发异常捕获机制显示相应提示信息。 --- #### 查找与替换 查找特定模式的位置以及实施局部替代都是日常开发过程中非常实用的功能点之一。为此我们分别介绍两个重要方法——find 和 replace : 1. **Find**: 返回第一次匹配项所在下标或者是npos表明不存在任何符合条件的结果; 2. **Replace**: 替换掉目标区域的数据内容为新给定的一段数据。 具体应用案例见下方片段说明: ```cpp #include <iostream> #include <string> using namespace std; int main () { string str ("We think in generalities, but we live in details."); // 引自《The Art of Computer Programming》Vol. I by Donald E.Knuth int index; // 寻找首次出现"live" index = str.find("live"); if(index != string::npos) cout << "\"live\" first found at position:" << index << '\n'; // 执行替换动作把"generalities"改成"abstractions" str.replace(str.find("generalities"), strlen("generalities"),"abstractions"); cout << str << "\n"; return 0; } ``` 最终得到调整过后的完整句子:“We think in abstractions, but we live in details.” --- #### 高级技巧:基于算法的标准库配合使用 除了内置的方法之外,还可以借助 `<algorithm>` 头文件里的通用工具进一步增强灵活性。比如 sort 排序、reverse 反转顺序等等都可以作用于整个字符串之上。 举个简单例子来进行字母倒置排列测试吧! ```cpp #include <bits/stdc++.h> using namespace std ; void reverseString(string &s){ reverse(s.begin(), s.end()); } int main(){ string test="ABCDEFGH"; cout << "Original String :"<<test<<"\n"; reverseString(test); cout << "Reversed String:"<<test<<"\n"; return 0 ; } ``` 以上脚本将会呈现前后颠倒形式的新版本字符串! ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值