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 数组更安全、更强大,优先使用
相关推荐
a187927218317 分钟前
【算法】双指针与滑动窗口(三):相向双指针——比较、排除、收缩
算法·leetcode·双指针·滑动窗口·原理·相向双指针·算法讲解
代码王同学11 分钟前
2026.9.15日C++类和对象学习收获笔记
c语言·c++
刚入门的大一新生22 分钟前
Linux-简单设计libc库
linux·c++
AI 小老六27 分钟前
Agent 记忆系统难在取舍
人工智能·算法·架构·agent·memory·harness
大熊背29 分钟前
《Color constancy by characterization of illumination chromaticity》之色度色域最大化算法(一)
数码相机·算法·白平衡·色度色域
不会就选b29 分钟前
算法日常・每日刷题--<贪心>13
算法
带多刺的玫瑰43 分钟前
Leecode#35刷题之搜索插入位置
java·python·算法
我不会起名字3221 小时前
万字总结Golang入门项目
数据结构·经验分享·算法·golang·项目实战·复盘
6Hzlia1 小时前
【Classic 150 刷题计划】 LeetCode 14. 最长公共前缀 | C++ 纵向扫描法与防越界细节
c++·算法·leetcode
Niuguangshuo9 小时前
论文解读:CTC,端到端序列识别的开山之作
算法·语音识别