在 CentOS 上写 C++ 程序时,字符串几乎是最常见的数据类型之一:日志要拼接,输入要读取,文本内容还要查找、替换和裁剪。相比手动处理字符数组,标准库里的 std::string 已经覆盖了大部分日常开发场景。
这篇文章按“先能用、再少踩坑”的思路,把字符串操作中最常见的一组基础能力拆开说明。看完之后,你可以快速判断该用哪个方法,也能顺手避开几个在实际编码里很容易忽略的小细节。
先从头文件和字符串创建开始
在使用 std::string 之前,先包含必要的头文件:
#include <iostream>
#include <string>
其中 <string> 提供字符串类型本身,<iostream> 则用于输入输出示例。
创建和初始化字符串
定义字符串时,直接使用 std::string 即可,写法和普通变量没有太大区别:
std::string str1 = "Hello";
std::string str2 = "World";
这种方式适合大多数场景,可读性也比较好。对刚从 C 风格字符串过渡到 C++ 标准库的开发者来说,这通常也是最先要建立的使用习惯。
拼接、长度和字符访问怎么写
字符串的基础读取和拼接操作,是日常代码里出现频率最高的一部分。

连接字符串
C++ 里拼接字符串最直接的方法就是使用 + 或 +=:
std::string str3 = str1 + " " + str2; // 结果是 "Hello World"
str1 += " " + str2; // str1 现在变成 "Hello World"
如果你要生成一个新字符串,用 + 更直观;如果是在原变量上继续追加内容,+= 会更顺手。
获取字符串长度
想知道字符串当前有多少个字符,可以使用 length() 或 size():
std::cout << "Length of str1: " << str1.length() << std::endl; // 输出 11
这两个方法在 std::string 上效果一致,项目里通常选一种统一使用即可。
访问字符串中的字符
读取单个字符时,既可以用下标,也可以用 at():
char firstChar = str1[0]; // 'H'
char secondChar = str1.at(1); // 'e'
[] 写起来更简洁,而 at() 会做边界检查。只要存在越界风险,尤其是位置来自用户输入或外部数据时,at() 通常更稳妥。
查找、替换和删除是最常用的文本修改操作
当字符串内容需要定位并修改时,find()、replace() 和 erase() 是最常见的一组组合。

查找子字符串
find() 会返回匹配到的位置,起始下标从 0 开始:
size_t found = str1.find("World"); // 返回 6
if (found != std::string::npos) {
std::cout << "Substring found at position: " << found << std::endl;
}
这里最关键的是 std::string::npos。如果没有找到目标内容,返回值就不是普通数字,而是这个特殊标记。实际开发里,漏掉这个判断是比较常见的错误。
替换子字符串
如果已经知道要修改的位置和长度,可以直接调用 replace():
str1.replace(6, 5, "CentOS"); // 从第6个字符开始,替换5个字符,把"World"换成"CentOS"
它的核心参数有三个:起始位置、替换长度、新内容。适合做固定片段替换,尤其是在已经通过 find() 定位过目标的情况下。
删除子字符串
如果只是移除某一段内容,可以使用 erase():
str1.erase(6, 5); // 删除从位置6开始的5个字符
它的参数结构和 replace() 很接近,因此这两个方法通常会一起出现:先定位,再决定是删除还是替换。
处理带空格输入时,优先用 getline
很多初学者在读取字符串时,第一反应是写 cin >> input,但这种写法遇到空格就会提前结束。要读取整行内容,更实用的做法是使用 std::getline:
std::string input;
std::cout << "Enter a string: ";
std::getline(std::cin, input);
std::cout << "You entered: " << input << std::endl;
这在命令行工具、配置读取、简单交互程序里都很常见。只要输入内容可能包含空格,std::getline 往往就是更合适的选择。
掌握这些基础操作,已经能覆盖大多数日常场景
在 CentOS 环境下进行 C++ 开发时,std::string 的这些基础能力已经足够应对大量常规任务。从创建、拼接到查找、替换、删除,再到整行输入,标准库本身提供的接口已经相当完整。
后续如果还要处理更复杂的文本任务,可以继续扩展到字符串比较、分割、格式化甚至正则匹配。但在大多数工程代码里,先把这几组基础操作用熟,往往比一开始追求更复杂的技巧更有价值。









