C++ string类完全指南:从入门到精通
string类的基本概念
C++标准库中的string类是一个用于处理字符串的类,属于std命名空间。它封装了字符数组的操作,提供了丰富的成员函数,支持动态内存管理,避免了传统C风格字符串(如char*)的繁琐操作和内存泄漏风险。
string类的底层实现通常是动态数组,能够根据字符串长度自动调整内存大小。其设计遵循RAII(资源获取即初始化)原则,确保资源的自动释放。
string类的常用操作
初始化与赋值
string支持多种初始化方式:
std::string s1; // 默认初始化,空字符串
std::string s2("Hello"); // 从C风格字符串初始化
std::string s3(s2); // 拷贝构造
std::string s4(5, 'a'); // 填充5个字符'a'
赋值操作可以通过=或assign()实现:
s1 = "World"; // 直接赋值
s3.assign(s1, 0, 3); // 从s1的第0个字符开始,赋值3个字符
字符串连接
使用+运算符或append()方法:
std::string result = s2 + " " + s1;
s2.append(s1); // 将s1追加到s2末尾
访问字符
通过下标[]或at()访问单个字符:
char c1 = s2[0]; // 访问第0个字符
char c2 = s2.at(1); // 访问第1个字符(会检查边界)
字符串比较
使用==、!=等运算符或compare()方法:
if (s1 == s2) { /* ... */ }
int cmp = s1.compare(s2); // 返回0表示相等,正数表示s1大,负数表示s1小
string类的高级功能
子串操作
substr()用于提取子串:
std::string sub = s1.substr(1, 3); // 从第1个字符开始,提取3个字符
查找与替换
find()和replace()实现查找与替换:
size_t pos = s1.find("lo"); // 查找子串"lo"的位置
if (pos != std::string::npos) {
s1.replace(pos, 2, "***"); // 替换找到的子串
}
容量管理
resize()和reserve()调整字符串大小:
s1.resize(10); // 调整长度为10,不足部分填充空字符
s1.reserve(100); // 预分配100字节的内存
性能与优化建议
- 避免频繁拼接:多次使用
+拼接字符串会生成临时对象,推荐使用+=或append()。 - 预分配内存:已知字符串长度时,使用
reserve()减少动态分配的开销。 - 移动语义:C++11后支持移动构造和移动赋值,减少拷贝开销。
与C风格字符串的互操作
string提供c_str()和data()方法返回C风格字符串指针:
const char* ptr = s1.c_str(); // 返回以'\0'结尾的字符数组
总结
C++的string类提供了高效、安全的字符串操作接口,适合大多数场景。熟练掌握其用法可以显著提升代码的可读性和性能。
BbS.okacop020.info/PoSt/1120_577908.HtM
BbS.okacop021.info/PoSt/1120_085372.HtM
BbS.okacop022.info/PoSt/1120_510144.HtM
BbS.okacop023.info/PoSt/1120_071136.HtM
BbS.okacop024.info/PoSt/1120_398601.HtM
BbS.okacop025.info/PoSt/1120_674503.HtM
BbS.okacop026.info/PoSt/1120_781637.HtM
BbS.okacop027.info/PoSt/1120_483941.HtM
BbS.okacop028.info/PoSt/1120_808672.HtM
BbS.okacop029.info/PoSt/1120_196700.HtM
BbS.okacop020.info/PoSt/1120_492682.HtM
BbS.okacop021.info/PoSt/1120_591653.HtM
BbS.okacop022.info/PoSt/1120_698719.HtM
BbS.okacop023.info/PoSt/1120_490058.HtM
BbS.okacop024.info/PoSt/1120_687601.HtM
BbS.okacop025.info/PoSt/1120_384831.HtM
BbS.okacop026.info/PoSt/1120_368141.HtM
BbS.okacop027.info/PoSt/1120_334703.HtM
BbS.okacop028.info/PoSt/1120_527591.HtM
BbS.okacop029.info/PoSt/1120_412218.HtM
BbS.okacop020.info/PoSt/1120_941406.HtM
BbS.okacop021.info/PoSt/1120_758649.HtM
BbS.okacop022.info/PoSt/1120_049564.HtM
BbS.okacop023.info/PoSt/1120_690696.HtM
BbS.okacop024.info/PoSt/1120_186551.HtM
BbS.okacop025.info/PoSt/1120_973961.HtM
BbS.okacop026.info/PoSt/1120_324302.HtM
BbS.okacop027.info/PoSt/1120_437403.HtM
BbS.okacop028.info/PoSt/1120_370641.HtM
BbS.okacop029.info/PoSt/1120_420756.HtM
BbS.okacop020.info/PoSt/1120_442520.HtM
BbS.okacop021.info/PoSt/1120_715049.HtM
BbS.okacop022.info/PoSt/1120_996957.HtM
BbS.okacop023.info/PoSt/1120_539964.HtM
BbS.okacop024.info/PoSt/1120_150319.HtM
BbS.okacop025.info/PoSt/1120_535050.HtM
BbS.okacop026.info/PoSt/1120_149187.HtM
BbS.okacop027.info/PoSt/1120_533485.HtM
BbS.okacop028.info/PoSt/1120_024745.HtM
BbS.okacop029.info/PoSt/1120_212303.HtM
BbS.okacop020.info/PoSt/1120_525082.HtM
BbS.okacop021.info/PoSt/1120_762862.HtM
BbS.okacop022.info/PoSt/1120_715920.HtM
BbS.okacop023.info/PoSt/1120_646547.HtM
BbS.okacop024.info/PoSt/1120_878931.HtM
BbS.okacop025.info/PoSt/1120_664461.HtM
BbS.okacop026.info/PoSt/1120_291555.HtM
BbS.okacop027.info/PoSt/1120_379121.HtM
BbS.okacop028.info/PoSt/1120_441457.HtM
BbS.okacop029.info/PoSt/1120_494208.HtM
BbS.okacop020.info/PoSt/1120_309886.HtM
BbS.okacop021.info/PoSt/1120_437455.HtM
BbS.okacop022.info/PoSt/1120_767144.HtM
BbS.okacop023.info/PoSt/1120_200631.HtM
BbS.okacop024.info/PoSt/1120_380769.HtM
BbS.okacop025.info/PoSt/1120_060568.HtM
BbS.okacop026.info/PoSt/1120_504818.HtM
BbS.okacop027.info/PoSt/1120_589842.HtM
BbS.okacop028.info/PoSt/1120_208793.HtM
BbS.okacop029.info/PoSt/1120_296712.HtM
BbS.okacop020.info/PoSt/1120_692324.HtM
BbS.okacop021.info/PoSt/1120_221858.HtM
BbS.okacop022.info/PoSt/1120_592730.HtM
BbS.okacop023.info/PoSt/1120_298058.HtM
BbS.okacop024.info/PoSt/1120_305655.HtM
BbS.okacop025.info/PoSt/1120_883642.HtM
BbS.okacop026.info/PoSt/1120_831132.HtM
BbS.okacop027.info/PoSt/1120_318278.HtM
BbS.okacop028.info/PoSt/1120_746442.HtM
BbS.okacop029.info/PoSt/1120_022438.HtM
BbS.okacop030.info/PoSt/1120_983164.HtM
BbS.okacop031.info/PoSt/1120_258712.HtM
BbS.okacop032.info/PoSt/1120_259124.HtM
BbS.okacop033.info/PoSt/1120_854744.HtM
BbS.okacop034.info/PoSt/1120_811558.HtM
BbS.okacop035.info/PoSt/1120_874367.HtM
BbS.okacop036.info/PoSt/1120_734029.HtM
BbS.okacop037.info/PoSt/1120_636769.HtM
BbS.okacop038.info/PoSt/1120_708040.HtM
BbS.okacop039.info/PoSt/1120_470135.HtM



