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 数组更安全、更强大,优先使用
相关推荐
Tisfy20 分钟前
LeetCode 1288.删除被覆盖区间:排序(非二重循环暴力)
算法·leetcode·题解·排序
Σίσυφος190031 分钟前
激光三角 光平面标定之后计算深度图
算法·平面
阿文的代码库36 分钟前
经典算法题剖析:按奇偶排序数组
数据结构·算法
AI小码41 分钟前
WAIC 2026前瞻:AI产业进入拼落地的下半场
人工智能·算法·ai·程序员·大模型·编程·智能体
汉克老师1 小时前
GESP2026年6月认证C++八级( 第二部分判断题(1-10))精讲
c++·归并排序·dijkstra·二分·互斥·gesp8级·可重复组合
珠海西格电力2 小时前
零碳园区数据应用的具体场景有哪些?
大数据·人工智能·算法·架构·能源
nianniannnn2 小时前
c++复习自存--流、异常处理、多线程与C++工程规范
开发语言·c++
geovindu2 小时前
CSharp: Dijkstra Algorithms
开发语言·后端·算法·c#
学逆向的2 小时前
汇编——位运算
开发语言·汇编·算法·网络安全
可编程芯片开发2 小时前
基于simulink的PEM燃料电池控制系统建模与仿真,对比PID,积分分离以及滑模控制器
算法