STL-String usage
This commit is contained in:
		@@ -2,6 +2,61 @@
 | 
			
		||||
 | 
			
		||||
下面我为你系统总结 `std::string` 的所有常用用法和函数,按类别分类,力求全面:
 | 
			
		||||
 | 
			
		||||
好的,我帮你整理一个 **C++ `std::string` 方法大全表格**,把常用方法、功能、参数和示例都列清楚,方便快速查阅。
 | 
			
		||||
 | 
			
		||||
| 方法 / 操作                                                   | 功能说明       | 参数                                                | 返回值 / 备注                     | 示例                                                     |
 | 
			
		||||
| --------------------------------------------------------- | ---------- | ------------------------------------------------- | ---------------------------- | ------------------------------------------------------ |
 | 
			
		||||
| 构造                                                        | 创建字符串      | `string s;`、`string s("abc");`、`string s(5,'x');` | -                            | `string s(3,'a'); // "aaa"`                            |
 | 
			
		||||
| `size()` / `length()`                                     | 字符串长度      | 无                                                 | `size_t`                     | `s.size();`                                            |
 | 
			
		||||
| `empty()`                                                 | 是否为空       | 无                                                 | `bool`                       | `s.empty();`                                           |
 | 
			
		||||
| `operator[]`                                              | 访问字符       | 索引                                                | `char&`                      | `s[0]='H';`                                            |
 | 
			
		||||
| `at()`                                                    | 安全访问字符     | 索引                                                | `char&`,越界抛异常                | `s.at(1);`                                             |
 | 
			
		||||
| `front()` / `back()`                                      | 第一个/最后一个字符 | 无                                                 | `char&`                      | `s.front();`                                           |
 | 
			
		||||
| `push_back(c)`                                            | 添加字符到末尾    | `char c`                                          | void                         | `s.push_back('!');`                                    |
 | 
			
		||||
| `pop_back()`                                              | 删除末尾字符     | 无                                                 | void                         | `s.pop_back();`                                        |
 | 
			
		||||
| `append(str)` / `+=`                                      | 拼接字符串      | `string` / `char*`                                | void                         | `s += "abc";` / `s.append("def");`                     |
 | 
			
		||||
| `insert(pos, str)` / `insert(it, c)`                      | 插入字符串或字符   | 位置 / 迭代器,字符串或字符                                   | void                         | `s.insert(2,"XY");`                                    |
 | 
			
		||||
| `erase(pos, len)` / `erase(it)`                           | 删除部分或单字符   | 位置和长度 / 迭代器                                       | void                         | `s.erase(0,3);`                                        |
 | 
			
		||||
| `replace(pos, len, str)`                                  | 替换子串       | 位置,长度,字符串                                         | void                         | `s.replace(0,2,"Hi");`                                 |
 | 
			
		||||
| `clear()`                                                 | 清空字符串      | 无                                                 | void                         | `s.clear();`                                           |
 | 
			
		||||
| `substr(pos, len)`                                        | 子串         | 位置和长度                                             | `string`                     | `s.substr(1,3);`                                       |
 | 
			
		||||
| `find(str)` / `rfind(str)`                                | 查找子串       | 字符串                                               | 索引/`npos`                    | `s.find("ab");`                                        |
 | 
			
		||||
| `find_first_of(str)` / `find_last_of(str)`                | 查找字符集合     | 字符串                                               | 索引/`npos`                    | `s.find_first_of("aeiou");`                            |
 | 
			
		||||
| `compare(str)`                                            | 字符串比较      | 字符串                                               | <0 / 0 / >0                  | `s1.compare(s2);`                                      |
 | 
			
		||||
| `c_str()`                                                 | 转 C 风格字符串  | 无                                                 | `const char*`                | `cout << s.c_str();`                                   |
 | 
			
		||||
| `stoi(s)` / `stol(s)` / `stoll(s)`                        | 字符串转整数     | 字符串                                               | int / long / long long       | `int n = stoi("123");`                                 |
 | 
			
		||||
| `stof(s)` / `stod(s)` / `stold(s)`                        | 字符串转浮点     | 字符串                                               | float / double / long double | `double d = stod("3.14");`                             |
 | 
			
		||||
| `to_string(val)`                                          | 数值转字符串     | 数值类型                                              | string                       | `string s = to_string(42);`                            |
 | 
			
		||||
| `begin()` / `end()`                                       | 迭代器        | 无                                                 | iterator                     | `for(auto it=s.begin(); it!=s.end(); ++it)`            |
 | 
			
		||||
| `rbegin()` / `rend()`                                     | 反向迭代器      | 无                                                 | reverse\_iterator            | `reverse(s.rbegin(), s.rend());`                       |
 | 
			
		||||
| `swap(s2)`                                                | 交换字符串      | string                                            | void                         | `s1.swap(s2);`                                         |
 | 
			
		||||
| `resize(n, c)`                                            | 改变长度       | 新长度, 可选填充字符                                       | void                         | `s.resize(5,'x');`                                     |
 | 
			
		||||
| `reserve(n)`                                              | 预留容量       | 整数                                                | void                         | `s.reserve(100);`                                      |
 | 
			
		||||
| `capacity()`                                              | 当前容量       | 无                                                 | size\_t                      | `s.capacity();`                                        |
 | 
			
		||||
| `shrink_to_fit()`                                         | 压缩容量       | 无                                                 | void                         | `s.shrink_to_fit();`                                   |
 | 
			
		||||
| `sort(begin,end)` / `reverse(begin,end)`                  | 排序/反转      | 迭代器区间                                             | void                         | `sort(s.begin(),s.end()); reverse(s.begin(),s.end());` |
 | 
			
		||||
| `isalpha(c)` / `isdigit(c)` / `toupper(c)` / `tolower(c)` | 字符操作       | 字符                                                | bool / char                  | `toupper('a');`                                        |
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
💡 **额外提示**:
 | 
			
		||||
 | 
			
		||||
1. `string` 是动态数组,可以用迭代器操作像 `vector` 一样。
 | 
			
		||||
2. 可以用范围 `for` 遍历:
 | 
			
		||||
 | 
			
		||||
```cpp
 | 
			
		||||
for(char c : s) cout << c;
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
3. 没有 `push_front`,插入开头用 `insert(s.begin(), c)`
 | 
			
		||||
4. 与 C 风格字符串互转:`c_str()` 和 `string(s)`
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
如果你愿意,我可以帮你画一个**图解版“string 功能地图”**,把 **初始化、访问、修改、拼接、查找、转换、迭代、IO** 全部画成一张图,视觉化一看就懂。
 | 
			
		||||
 | 
			
		||||
你想要我画吗?
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
### 🔹 1. **构造函数**
 | 
			
		||||
@@ -295,4 +350,166 @@ int main() {
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
如你需要,我可以给出一份“对比总结笔记表格(Markdown/LaTeX/PDF)”或演示更复杂转换例子。要吗?
 | 
			
		||||
好的,我们来整理一个 **C++ `std::string` 的使用大全**,我会尽量覆盖几乎所有常用操作、方法和用法,包括初始化、访问、修改、查找、比较、输入输出、拼接、转换等,并附带示例。
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
# **C++ `std::string` 使用大全**
 | 
			
		||||
 | 
			
		||||
```cpp
 | 
			
		||||
#include <iostream>
 | 
			
		||||
#include <string>
 | 
			
		||||
#include <algorithm>
 | 
			
		||||
#include <cctype>
 | 
			
		||||
using namespace std;
 | 
			
		||||
 | 
			
		||||
int main() {
 | 
			
		||||
    // ================================
 | 
			
		||||
    // 1. 初始化
 | 
			
		||||
    // ================================
 | 
			
		||||
    string s1;                       // 空字符串
 | 
			
		||||
    string s2("Hello");              // 用 C 风格字符串初始化
 | 
			
		||||
    string s3(s2);                   // 拷贝构造
 | 
			
		||||
    string s4(5, 'x');               // 生成 "xxxxx"
 | 
			
		||||
 | 
			
		||||
    // ================================
 | 
			
		||||
    // 2. 访问字符
 | 
			
		||||
    // ================================
 | 
			
		||||
    char c1 = s2[0];                 // 'H'
 | 
			
		||||
    char c2 = s2.at(1);              // 'e',越界会抛异常
 | 
			
		||||
    char &ref = s2[0];               // 可修改
 | 
			
		||||
    s2[0] = 'h';                     // 修改为 "hello"
 | 
			
		||||
 | 
			
		||||
    // ================================
 | 
			
		||||
    // 3. 拼接
 | 
			
		||||
    // ================================
 | 
			
		||||
    string s5 = s2 + " world";       // "hello world"
 | 
			
		||||
    s2 += "!";                        // "hello!"
 | 
			
		||||
    s2.append(" C++");                // "hello! C++"
 | 
			
		||||
 | 
			
		||||
    // 插入
 | 
			
		||||
    s2.insert(6, "my ");             // "hello!my  C++"
 | 
			
		||||
 | 
			
		||||
    // ================================
 | 
			
		||||
    // 4. 删除
 | 
			
		||||
    // ================================
 | 
			
		||||
    s2.erase(6, 3);                  // 从位置6删除3个字符
 | 
			
		||||
    s2.pop_back();                    // 删除最后一个字符
 | 
			
		||||
 | 
			
		||||
    // ================================
 | 
			
		||||
    // 5. 长度与大小
 | 
			
		||||
    // ================================
 | 
			
		||||
    size_t len = s2.length();         // 字符串长度
 | 
			
		||||
    size_t size = s2.size();          // 同 length()
 | 
			
		||||
    bool empty = s2.empty();          // 是否为空
 | 
			
		||||
 | 
			
		||||
    // ================================
 | 
			
		||||
    // 6. 查找
 | 
			
		||||
    // ================================
 | 
			
		||||
    size_t pos1 = s2.find("llo");    // 返回子串位置,找不到返回 npos
 | 
			
		||||
    size_t pos2 = s2.rfind("o");     // 从右往左查找
 | 
			
		||||
    size_t pos3 = s2.find_first_of("aeiou"); // 找到第一个元音字母
 | 
			
		||||
    size_t pos4 = s2.find_last_of("aeiou");  // 找到最后一个元音字母
 | 
			
		||||
 | 
			
		||||
    // ================================
 | 
			
		||||
    // 7. 比较
 | 
			
		||||
    // ================================
 | 
			
		||||
    string a = "abc", b = "abd";
 | 
			
		||||
    int cmp = a.compare(b);           // <0 a<b, 0 a=b, >0 a>b
 | 
			
		||||
 | 
			
		||||
    // ================================
 | 
			
		||||
    // 8. 子串
 | 
			
		||||
    // ================================
 | 
			
		||||
    string sub = s2.substr(0, 5);     // 从位置0开始,长度5
 | 
			
		||||
 | 
			
		||||
    // ================================
 | 
			
		||||
    // 9. 转换
 | 
			
		||||
    // ================================
 | 
			
		||||
    string strNum = "123";
 | 
			
		||||
    int num = stoi(strNum);            // string -> int
 | 
			
		||||
    long long ll = stoll(strNum);      // string -> long long
 | 
			
		||||
    float f = stof("3.14");            // string -> float
 | 
			
		||||
    double d = stod("3.14159");        // string -> double
 | 
			
		||||
    string str1 = to_string(456);      // int -> string
 | 
			
		||||
 | 
			
		||||
    // ================================
 | 
			
		||||
    // 10. 排序/反转
 | 
			
		||||
    // ================================
 | 
			
		||||
    reverse(s2.begin(), s2.end());    // 反转字符串
 | 
			
		||||
    sort(s2.begin(), s2.end());       // 字典序排序
 | 
			
		||||
 | 
			
		||||
    // ================================
 | 
			
		||||
    // 11. 遍历
 | 
			
		||||
    // ================================
 | 
			
		||||
    for(char ch : s2) cout << ch << " ";   // 范围 for
 | 
			
		||||
    for(size_t i = 0; i < s2.size(); i++) cout << s2[i];
 | 
			
		||||
 | 
			
		||||
    // ================================
 | 
			
		||||
    // 12. 插入/删除字符操作
 | 
			
		||||
    // ================================
 | 
			
		||||
    s2.push_back('!');                // 在末尾加字符
 | 
			
		||||
    s2.insert(s2.begin(), 'H');      // 在开头插入字符
 | 
			
		||||
    s2.erase(s2.begin());             // 删除开头字符
 | 
			
		||||
 | 
			
		||||
    // ================================
 | 
			
		||||
    // 13. 比较大小/字典序
 | 
			
		||||
    // ================================
 | 
			
		||||
    if("abc" < "abd") cout << "abc < abd";
 | 
			
		||||
 | 
			
		||||
    // ================================
 | 
			
		||||
    // 14. 清空
 | 
			
		||||
    // ================================
 | 
			
		||||
    s2.clear();                        // 清空字符串
 | 
			
		||||
 | 
			
		||||
    // ================================
 | 
			
		||||
    // 15. 转换为 C 风格字符串
 | 
			
		||||
    // ================================
 | 
			
		||||
    const char* cstr = s2.c_str();
 | 
			
		||||
 | 
			
		||||
    // ================================
 | 
			
		||||
    // 16. 替换
 | 
			
		||||
    // ================================
 | 
			
		||||
    s2.replace(0, 3, "HELLO");         // 将前3个字符替换成 HELLO
 | 
			
		||||
 | 
			
		||||
    // ================================
 | 
			
		||||
    // 17. 字符判断/转换
 | 
			
		||||
    // ================================
 | 
			
		||||
    for(char &ch : s2) {
 | 
			
		||||
        if(isalpha(ch)) ch = toupper(ch);  // 转大写
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // ================================
 | 
			
		||||
    // 18. 流操作
 | 
			
		||||
    // ================================
 | 
			
		||||
    string input;
 | 
			
		||||
    cin >> input;                       // 读取单个单词
 | 
			
		||||
    getline(cin, input);                // 读取整行
 | 
			
		||||
    cout << input << endl;
 | 
			
		||||
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
## ✅ 总结
 | 
			
		||||
 | 
			
		||||
`std::string` 能做的事情非常多,大体可分为:
 | 
			
		||||
 | 
			
		||||
1. **初始化/赋值/复制**
 | 
			
		||||
2. **访问/修改字符**
 | 
			
		||||
3. **拼接、插入、删除、替换**
 | 
			
		||||
4. **长度、空性检查**
 | 
			
		||||
5. **查找、子串、比较**
 | 
			
		||||
6. **遍历**
 | 
			
		||||
7. **转换类型**
 | 
			
		||||
8. **排序、反转、大小写转换**
 | 
			
		||||
9. **C 风格字符串接口**
 | 
			
		||||
10. **输入输出**
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
如果你愿意,我可以帮你画一张\*\*`string` 方法总结表格\*\*,把**所有方法、功能、返回值和示例**一页就能看到,像官方手册一样直观。
 | 
			
		||||
 | 
			
		||||
你想让我画吗?
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user