C++ string 类详解:初始化、操作与原始字符串

沈知远
沈知远
发布时间:2026-10-16 | 3人浏览过
原创

C++ 中的 string 类提供了比 char * 更安全、便捷的字符串处理方式,自动管理内存且支持丰富的操作。本文将深入讲解 string 的初始化、拼接、长度获取、输入输出以及 C++11 原始字符串等关键特性。

string 类基础与 char * 对比

在 C++ 中,除了传统的 char * 指针,标准库提供了专门的字符串类型 string。使用时需包含对应头文件:

#include <string>
#include <iostream>
using namespace std;

第1步:基本声明与初始化

目的:了解 string 的基本定义及默认行为。

代码示例:

string str1; // 默认空字符串
string str2 = "hello world"; // 直接赋值初始化

cout << str2 << endl; // 输出结果: hello world
cout << str2[2] << endl; // 输出结果: l (索引访问方式类似数组)

优势:相比于 char *,string 类在设计上能自动处理内存分配。例如通过 cin 读入外部字符串时,无需担心缓冲区溢出问题,程序会自动调整大小以容纳输入内容。

string input_str;
cin >> input_str; // 自动扩展容量

第2步:C++11 列表初始化

目的:利用现代 C++ 特性进行初始化。

虽然可以使用 C++11 的列表初始化语法,但在 string 场景下,直接使用等号赋值更为常见和直观:

string str1 = {"hello world"};
string str2{"test"}; // 括号初始化

字符串核心操作

第3步:字符串拼接

目的:合并多个字符串。

使用 char * 时通常需要调用 strcat,而 string 重载了加法运算符,使拼接更简单:

string str1 = "hello";
string str2 = "world";
string str3 = str1 + str2; // 结果: helloworld

同时支持 += 运算符用于原地追加:

str1 += str2; // 等价于 str1 = str1 + str2

第4步:获取字符串长度

目的:查询字符数量。

string 对象提供了 .size() 成员函数,替代了 C 风格字符串需要的 strlen 函数:

string text = "hello";
cout << text.size() << endl; // 输出: 5

输入输出与特殊文本处理

第5步:处理整行输入(getline)

目的:读取包含空格的完整一行文本。

cin >> 遇到空格会停止读取,因此读取整行需使用 getline。注意其签名与 C 风格不同:

// C 风格 char 数组:需要指定缓冲区长度的第二个参数
char st[100];
cin.getline(st, 100);

// C++ string:作为参数传入 cin,无需指定长度
string line;
getline(cin, line); // string 自动扩容,安全且方便

第6步:C++11 原始字符串(Raw String)

目的:简化包含转义字符或换行的文本表示。

传统字符串中,双引号和换行符需要转义(如 \),当文本复杂时代码可读性极差。C++11 引入了原始字符串,以 R"(...) 包裹内容,内部符号原样输出:

// 普通写法,转义繁琐
cout << "i want to output \"hello world\"" << endl;

// 原始字符串写法
cout << R"(i want to output "hello world")" << endl;

// 支持自然换行
cout << R"(i want to output 
"hello world")" << endl;

注意事项:自定义分隔符

如果原始字符串内容本身包含 )" 序列,编译器可能无法正确识别结尾。此时可在 R 和 ( 之间加入标识符(除空格、括号、反斜杠和控制字符外的任意字符)来界定开头和结尾:

// 以 tst 为分隔符标识
cout << R"tst("(test)")tst" << endl;
// 输出: "(test)"

以上就是 C++ string 类型的详细内容,更多关于 C++ 标准库字符串处理的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表