C++ string类完全指南
string类的基本概念
C++中的string类是标准模板库(STL)的一部分,定义在<string>头文件中。它是对C风格字符串(字符数组)的封装,提供了更安全、更便捷的字符串操作方式。string类自动管理内存,避免了手动分配和释放内存的麻烦。
string类的常用操作
初始化与赋值
可以通过多种方式初始化string对象:
std::string s1; // 默认初始化,空字符串
std::string s2("Hello"); // 从C风格字符串初始化
std::string s3(s2); // 拷贝构造
std::string s4(5, 'a'); // 重复字符初始化
赋值操作支持直接赋值或通过assign()方法:
s1 = "World";
s2.assign(s1.begin(), s1.end());
访问字符
通过[]运算符或at()方法访问字符,后者会进行边界检查:
char c1 = s1[0]; // 无边界检查
char c2 = s1.at(1); // 有边界检查,越界抛出异常
字符串连接
使用+运算符或append()方法连接字符串:
std::string s5 = s1 + " " + s2;
s1.append(s2);
string类的常用方法
查找与替换
find()方法用于查找子字符串,返回首次出现的位置(未找到返回string::npos):
size_t pos = s1.find("lo");
if (pos != std::string::npos) {
s1.replace(pos, 2, "LL"); // 替换子字符串
}
子字符串提取
substr()方法用于提取子字符串:
std::string sub = s1.substr(1, 3); // 从位置1开始,提取3个字符
大小与容量
size()和length()返回字符串长度,capacity()返回当前分配的内存大小:
size_t len = s1.size();
size_t cap = s1.capacity();
string类的性能优化
预分配内存
通过reserve()方法预分配内存,避免频繁扩容:
std::string s;
s.reserve(100); // 预分配100字节
移动语义
C++11引入的移动语义可以高效转移字符串资源:
std::string s6 = std::move(s1); // s1的资源转移到s6,s1变为空
string类与C风格字符串的转换
转换为C风格字符串
通过c_str()或data()方法获取C风格字符串(以\0结尾):
const char* cstr = s1.c_str();
从C风格字符串构造
直接传入C风格字符串即可构造string对象:
std::string s7("C-style string");
注意事项
string类内部以\0结尾,但不需要手动添加。- 避免在循环中频繁拼接字符串,可能导致性能问题。
- 使用
std::getline()读取包含空格的字符串,而非>>运算符。
示例代码
以下是一个完整的示例,展示string类的常见用法:
#include <iostream>
#include <string>
int main() {
std::string s1 = "Hello";
std::string s2 = "World";
std::string s3 = s1 + " " + s2;
std::cout << s3 << std::endl; // 输出: Hello World
s3.replace(6, 5, "C++");
std::cout << s3 << std::endl; // 输出: Hello C++
return 0;
}
BbS.okane367.info/PoSt/1121_088390.HtM
BbS.okane368.info/PoSt/1121_082852.HtM
BbS.okane369.info/PoSt/1121_070380.HtM
BbS.okane370.info/PoSt/1121_443926.HtM
BbS.okane371.info/PoSt/1121_700696.HtM
BbS.okane372.info/PoSt/1121_036194.HtM
BbS.okane373.info/PoSt/1121_352327.HtM
BbS.okane374.info/PoSt/1121_751843.HtM
BbS.okane375.info/PoSt/1121_490506.HtM
BbS.okane376.info/PoSt/1121_368983.HtM
BbS.okane367.info/PoSt/1121_657745.HtM
BbS.okane368.info/PoSt/1121_491918.HtM
BbS.okane369.info/PoSt/1121_929833.HtM
BbS.okane370.info/PoSt/1121_031391.HtM
BbS.okane371.info/PoSt/1121_399263.HtM
BbS.okane372.info/PoSt/1121_848533.HtM
BbS.okane373.info/PoSt/1121_651918.HtM
BbS.okane374.info/PoSt/1121_708914.HtM
BbS.okane375.info/PoSt/1121_737495.HtM
BbS.okane376.info/PoSt/1121_608728.HtM
BbS.okane367.info/PoSt/1121_353569.HtM
BbS.okane368.info/PoSt/1121_844661.HtM
BbS.okane369.info/PoSt/1121_714277.HtM
BbS.okane370.info/PoSt/1121_311204.HtM
BbS.okane371.info/PoSt/1121_294810.HtM
BbS.okane372.info/PoSt/1121_735865.HtM
BbS.okane373.info/PoSt/1121_866959.HtM
BbS.okane374.info/PoSt/1121_964184.HtM
BbS.okane375.info/PoSt/1121_000657.HtM
BbS.okane376.info/PoSt/1121_916557.HtM
BbS.okane367.info/PoSt/1121_911123.HtM
BbS.okane368.info/PoSt/1121_626976.HtM
BbS.okane369.info/PoSt/1121_980885.HtM
BbS.okane370.info/PoSt/1121_302755.HtM
BbS.okane371.info/PoSt/1121_747542.HtM
BbS.okane372.info/PoSt/1121_084830.HtM
BbS.okane373.info/PoSt/1121_331159.HtM
BbS.okane374.info/PoSt/1121_372824.HtM
BbS.okane375.info/PoSt/1121_947257.HtM
BbS.okane376.info/PoSt/1121_308304.HtM
BbS.okane367.info/PoSt/1121_736160.HtM
BbS.okane368.info/PoSt/1121_345574.HtM
BbS.okane369.info/PoSt/1121_182084.HtM
BbS.okane370.info/PoSt/1121_856568.HtM
BbS.okane371.info/PoSt/1121_890179.HtM
BbS.okane372.info/PoSt/1121_441273.HtM
BbS.okane373.info/PoSt/1121_031209.HtM
BbS.okane374.info/PoSt/1121_782743.HtM
BbS.okane375.info/PoSt/1121_013555.HtM
BbS.okane376.info/PoSt/1121_244442.HtM
BbS.okane367.info/PoSt/1121_095848.HtM
BbS.okane368.info/PoSt/1121_783608.HtM
BbS.okane369.info/PoSt/1121_844378.HtM
BbS.okane370.info/PoSt/1121_115977.HtM
BbS.okane371.info/PoSt/1121_403209.HtM
BbS.okane372.info/PoSt/1121_081702.HtM
BbS.okane373.info/PoSt/1121_077932.HtM
BbS.okane374.info/PoSt/1121_757534.HtM
BbS.okane375.info/PoSt/1121_999682.HtM
BbS.okane376.info/PoSt/1121_378521.HtM
BbS.okane377.info/PoSt/1121_405585.HtM
BbS.okane378.info/PoSt/1121_330648.HtM
BbS.okane379.info/PoSt/1121_068309.HtM
BbS.okane380.info/PoSt/1121_470559.HtM
BbS.okane381.info/PoSt/1121_405304.HtM
BbS.okane382.info/PoSt/1121_018010.HtM
BbS.okane383.info/PoSt/1121_686217.HtM
BbS.okane384.info/PoSt/1121_715369.HtM
BbS.okane385.info/PoSt/1121_431329.HtM
BbS.okane386.info/PoSt/1121_208524.HtM
BbS.okane377.info/PoSt/1121_012007.HtM
BbS.okane378.info/PoSt/1121_743685.HtM
BbS.okane379.info/PoSt/1121_577765.HtM
BbS.okane380.info/PoSt/1121_615686.HtM
BbS.okane381.info/PoSt/1121_533072.HtM
BbS.okane382.info/PoSt/1121_526722.HtM
BbS.okane383.info/PoSt/1121_362552.HtM
BbS.okane384.info/PoSt/1121_084500.HtM
BbS.okane385.info/PoSt/1121_154117.HtM
BbS.okane386.info/PoSt/1121_903321.HtM
