C++ string操作指南:从入门到精通

一、为什么要用 string?

之前学的 char[] 缺点:

  • 必须手动处理 \0,容易乱码
  • 不能直接用 = 赋值、+ 拼接
  • 长度受限,容易越界
  • 函数少,操作麻烦

string 优点:

  • 是 C++ 标准类,安全方便
  • 可以直接 =、+、== 比较
  • 自动管理内存,不用管 \0
  • 内置大量常用函数

头文件:

cpp 复制代码
#include <string>
using namespace std;

二、string 定义与初始化

cpp 复制代码
// 1. 空字符串
string s1;

// 2. 直接初始化
string s2 = "hello world";

// 3. 构造方式
string s3("C++ string");

// 4. 重复 n 个字符
string s4(5, 'a');   // "aaaaa"

三、最常用操作(必背)

1. 赋值 =

cpp 复制代码
string s;
s = "hello";

2. 拼接 +

cpp 复制代码
string s1 = "hello";
string s2 = " world";
string s3 = s1 + s2;   // "hello world"

3. 访问单个字符(像数组一样)

cpp 复制代码
string s = "hello";
cout << s[0];    // 'h'
cout << s[1];    // 'e'

4. 比较 > < == !=

直接按字典序比较,非常方便:

cpp 复制代码
string s1 = "apple";
string s2 = "banana";

if (s1 < s2) { ... }   // 成立
if (s1 == "apple") { ... }

四、string 常用成员函数

1. 获取长度

cpp 复制代码
int len = s.size();     // 常用
int len = s.length();   // 一样

2. 判断是否为空

cpp 复制代码
if (s.empty()) { ... }

3. 截取子串 substr

cpp 复制代码
// 从下标 0 开始,取 3 个字符
string sub = s.substr(0, 3);

4. 查找 find(查找失败返回 string::npos)

cpp 复制代码
int pos = s.find("llo");
if (pos != string::npos) {
    cout << "找到了,下标:" << pos;
}

5. 替换 replace

cpp 复制代码
// 从下标 2 开始,删除 2 个字符,替换成 "xx"
s.replace(2, 2, "xx");

6. 插入 insert

cpp 复制代码
s.insert(1, "++");   // 下标 1 处插入

7. 删除 erase

cpp 复制代码
s.erase(2, 3);   // 从下标 2 删 3 个字符

五、输入与输出

cpp 复制代码
string s;
cin >> s;            // 遇到空格/回车停止
getline(cin, s);     // 读取一整行(包括空格)
cout << s << endl;

注意:cin >> s 后如果要用 getline,需要吸收换行符。


六、完整综合示例

cpp 复制代码
#include <iostream>
#include <string>
using namespace std;

int main() {
    string s = "hello c++";

    cout << "长度:" << s.size() << endl;
    cout << "子串:" << s.substr(0, 5) << endl;

    int pos = s.find("c++");
    if (pos != string::npos) {
        cout << "c++ 在下标:" << pos << endl;
    }

    s.replace(6, 3, "Python");
    cout << "替换后:" << s << endl;

    system("pause");
    return 0;
}

七、string vs char \[\] 对比(面试常问)

表格

特性 char\[\] string
内存 固定大小,手动管理 自动扩容
赋值 / 拼接 不能直接 = + 可以直接用
结束符 必须 \0 自动处理
安全性 易越界、乱码 更安全
功能 极少 非常丰富

一句话:C++ 写字符串优先用 string!


八、新手易错点

  1. 忘记 #include <string>
  2. 用 scanf/printf 直接读写 string(会错)
  3. find 没找到不判断,直接用下标
  4. 下标越界访问
  5. 混用 cin >> 和 getline 导致读空行

九、今日重点总结

  1. string 是 C++ 标准字符串,头文件 <string>
  2. 支持直接 = 赋值、+ 拼接、== 比较
  3. 常用函数:size() / empty() / substr() / find() / replace() / insert() / erase()
  4. 读整行用 getline(cin, s)
  5. 比 char 数组更安全、更强大,优先使用
相关推荐
写后端的胖头鱼5 小时前
一文详解B+树原理(附场景+示例)
数据结构·b树
怕浪猫6 小时前
RAG 面试 6 连问,从原理到优化全部覆盖
python·算法·面试
无线通信科研笔记6 小时前
IEEE TVT 2026 论文精读与完整复现|相位误差如何重塑近场 RIS 的幅相响应
论文阅读·人工智能·python·算法·论文笔记
mmmmath_37 小时前
二叉树の递归遍历
算法
All for pursuit.8 小时前
【位运算-1】338.比特位计数
数据结构·c++·算法·leetcode
小师兄吃牛肉8 小时前
C语言中的nullptr有必要吗
c语言·c++·算法
WL学习笔记9 小时前
日期类(C++)
开发语言·c++·日期类实现
H.莓飛10 小时前
【C++】命名空间、缺省参数、函数重载与引用
linux·开发语言·c++·visual studio
一只小小的芙厨10 小时前
【线性DP】
学习·算法·动态规划
xxwl58510 小时前
数据结构知识点和代码实现总结(C语言实现)
c语言·开发语言·数据结构