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 数组更安全、更强大,优先使用
相关推荐
坤坤子吖15 分钟前
Linux网络编程:TCP服务器的多进程与多线程实现
linux·服务器·开发语言·网络·c++·笔记·学习
一晌小贪欢1 小时前
Python基础:第 09 篇 · while 循环:重复直到不满足
开发语言·c++·python·数据可视化·面向对象·python办公
zh_xuan1 小时前
LeeCode 496. 下一个更大元素I
数据结构·算法·栈·单调栈
机 _ 长1 小时前
05 智算运维|8 张卡怎么才算「捆成一张」:NCCL 实测与拓扑
运维·人工智能·算法·智算运维
xiaoye-duck1 小时前
《C++ 项目:手写大模型接入 SDK》LLMManager架构设计与实现
开发语言·网络·c++·语言模型
一条大祥脚2 小时前
CuTe 与 CuTe DSL:从 C++ 模板元编程到 Python DSL 的 GPU 编程演进
开发语言·c++·python·cutlass·cute·cute dsl
·present·2 小时前
CSAPP(lecture 13_02 Linking)
c语言·c++
早起CaiCai2 小时前
【2023-01 OM】利用深度学习算法融合异质观测实现海洋场降尺度
人工智能·深度学习·算法
梦里寻码3 小时前
我用 NestJS + Vue3 写了一套完整的研发管理系统(58 表 / 229 API / 130 项断言,全开源
前端·后端·算法
旖旎夜光3 小时前
【C++ 基础入门】C++ 多态(上):虚函数、重写、override/final 与抽象类
开发语言·c++·笔记·学习