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 数组更安全、更强大,优先使用
相关推荐
想学会c++10 小时前
单例模式笔记总结
c++·笔记·单例模式
阿旭超级学得完10 小时前
C++11(初始化)
java·开发语言·数据结构·c++·算法
黎阳之光10 小时前
黎阳之光:视频孪生硬核赋能,共启数字孪生水利监测新征程
大数据·人工智能·算法·安全·数字孪生
云淡风轻~窗明几净10 小时前
关于角谷猜想的五行小猜想
数据结构·算法
广州灵眸科技有限公司10 小时前
瑞芯微(EASY EAI)RV1126B openclaw部署接入飞书
linux·网络·人工智能·算法·yolo·飞书
工业机器人销售服务10 小时前
告别漫长停机:伯朗特机器人如何用“自动换模”重塑生产效率
大数据·人工智能·算法
洛水水10 小时前
设计模式入门:从设计原则到核心模式
c++·设计模式
Languorous.10 小时前
C++数据结构进阶|并查集(Union-Find)详解:从原理到面试实战
数据结构·c++·面试
listhi52010 小时前
LTE标准下Turbo码编译码仿真
算法·matlab
不知名的老吴11 小时前
C++中emplace函数的不适场景总结(一)
java·开发语言·c++