C++ string 类详解:初始化、操作与原始字符串
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++ 标准库字符串处理的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













