【C++】STL String

本文介绍了C++中处理字符串的方法,包括使用下标和迭代器遍历字符串元素,以及字符串的基本操作如拼接、截取和反转等。

C++提供String 的模板类,可以很方便的处理字符串。

关于字符串的操作大致分为:

1. 遍历字符串中每个元素:两种方法,利用下表【】以及迭代器,下面会有例子解释

2. 对字符串本身进行操作

例如,字符串拼接,截取,反转等

3. 对字符串中特定字符的操作

具体方法用到的时候可以直接查。

下面这个例子显示了遍历字符串中元素的两种方法:


### C++ STL 中 `string` 的用法、特性、函数及最佳实践 C++ STL 中的 `string` 是一个非常强大的字符串处理类,它不仅提供了丰富的操作接口,还能够自动管理内存,避免了 C 风格字符串中常见的缓冲区溢出等问题。`string` 类的设计符合面向对象编程(OOP)的思想,使得字符串的操作更加直观和安全。 #### 用法 `string` 可以像内置类型一样直接声明和使用,并且支持多种构造方式。例如: - **默认构造函数**:创建一个空字符串。 ```cpp std::string s1; ``` - **从 C 风格字符串构造**: ```cpp std::string s2("hello world"); ``` - **拷贝构造函数**:利用已有的 `string` 对象构造新对象。 ```cpp std::string s3(s2); // 拷贝构造[^2] ``` - **从子串构造**:可以从另一个字符串的某一部分构造新的 `string`。 ```cpp std::string s4(s2, 0, 5); // 从索引 0 开始取 5 个字符,结果为 "hello" ``` #### 特性 - **动态内存管理**:`string` 自动处理内部缓冲区的大小调整,用户无需手动分配或释放内存。 - **兼容性**:可以通过 `.c_str()` 方法获取 C 风格的字符串指针,便于与 C 库函数交互。 - **迭代器支持**:支持标准库中的迭代器操作,如 `begin()`, `end()` 等。 - **异常安全**:在某些操作失败时(如内存不足),会抛出异常而不是导致未定义行为。 #### 常用函数 ##### 字符串操作 - **追加字符串**:`append()` 方法可以将另一个字符串追加到当前字符串末尾。 ```cpp s1.append(" world"); ``` - **插入字符串**:`insert()` 方法可以在指定位置插入字符串。 ```cpp s1.insert(5, " beautiful"); ``` - **替换字符串**:`replace()` 方法可以替换指定范围内的内容。 ```cpp s1.replace(5, 9, "amazing"); ``` - **删除字符串**:`erase()` 方法可以删除指定范围的内容。 ```cpp s1.erase(5, 7); // 从索引 5 开始删除 7 个字符 ``` ##### 查找与定位 - **查找子串或字符**:`find()` 和 `rfind()` 分别用于正向和反向查找。 ```cpp size_t pos = s1.find("world"); // 返回首次出现的位置[^4] ``` - **提取子串**:`substr()` 方法可以根据起始位置和长度提取子串。 ```cpp std::string sub = s1.substr(6, 5); // 从索引 6 开始取 5 个字符[^4] ``` ##### 大小与容量 - **获取长度**:`size()` 或 `length()` 方法返回当前字符串长度。 ```cpp size_t len = s1.size(); ``` - **预留空间**:`reserve()` 方法可以预先分配内存,避免频繁重新分配。 ```cpp s1.reserve(100); // 预留 100 字节空间 ``` - **调整大小**:`resize()` 方法可以改变字符串的实际大小。 ```cpp s1.resize(50); // 将字符串调整为 50 字符长[^4] ``` ##### 转换与处理 - **转换为小写/大写**:结合 `<algorithm>` 中的 `transform` 函数。 ```cpp std::transform(s1.begin(), s1.end(), s1.begin(), ::tolower); // 全部转小写 ``` #### 最佳实践 1. **避免频繁拼接操作**:如果需要多次拼接字符串,建议使用 `reserve()` 预先分配足够的内存,以减少内存重新分配的次数。 2. **使用迭代器进行遍历**:虽然可以通过索引访问字符,但使用迭代器更加通用且符合 STL 的设计理念。 3. **合理使用 `c_str()`**:当需要将 `string` 传递给 C 风格函数时,使用 `c_str()` 获取 `const char*` 指针是安全的做法。 4. **避免使用 `operator+` 进行大量拼接**:频繁使用 `+` 拼接字符串会导致性能下降,建议使用 `append()` 或 `stringstream`。 5. **注意查找函数的返回值**:`find()` 等查找函数返回 `std::string::npos` 表示未找到,务必进行检查以避免后续逻辑错误。 6. **尽量使用标准库算法**:如 `std::transform`, `std::replace` 等,这些算法与 `string` 结合使用时非常高效且简洁。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值