字符串
在 C++ 中,字符串主要通过 std::string
类来管理和操作。std::string
是标准库提供的一个类,封装了对字符串的管理功能,允许我们以一种更高效且易于使用的方式处理字符串。
C++ 中的 std::string
内容
std::string
内容存储方式
std::string
底层实际上是动态分配的字符数组,并且通过类的封装实现自动内存管理。它可以根据需要自动调整大小,不必像 C 中的char[]
那样需要开发者手动分配内存。std::string
中的字符串数据是以连续的字符存储在内存中的,可以通过下标访问每个字符。
例如:
std::string str = "Hello"; char firstChar = str[0]; // 访问第一个字符 'H'
自动管理内存
std::string
会根据字符串的长度自动管理内存。它的大小可以根据字符串的变化自动增长或缩小,因此无需担心溢出或内存分配问题。
例如:
std::string str = "Hello"; str += ", World!"; // 自动扩展内存,不需手动管理
字符串操作的成员函数
std::string
提供了许多内置的成员函数来操作字符串,包括:获取长度:
std::string str = "Hello"; size_t len = str.length(); // 返回字符串的长度
拼接字符串:
std::string str1 = "Hello"; std::string str2 = " World"; std::string result = str1 + str2; // 拼接字符串,结果为 "Hello World"
查找子串:
std::string str = "Hello World"; size_t pos = str.find("World"); // 查找 "World" 在字符串中的位置
获取子串:
std::string str = "Hello World"; std::string sub = str.substr(6, 5); // 提取从索引 6 开始的 5 个字符,结果为 "World"
替换字符串:
std::string str = "Hello World"; str.replace(6, 5, "C++"); // 把 "World" 替换为 "C++",结果为 "Hello C++"
与 C 风格字符串的互操作性
std::string
可以很方便地与 C 风格字符串(char*
或const char*
)互相转换:std::string
转换为 C 风格字符串:std::string str = "Hello"; const char* c_str = str.c_str(); // 转换为 C 风格字符串
C 风格字符串转换为
std::string
:const char* c_str = "Hello"; std::string str = c_str; // 从 C 风格字符串构造 std::string
运算符重载
std::string
支持常见运算符,如+
(用于拼接)、==
(用于比较)等。例如:std::string str1 = "Hello"; std::string str2 = "World"; std::string result = str1 + " " + str2; // 结果为 "Hello World" if (str1 == "Hello") { // 比较字符串内容是否相等 }
遍历字符串 可以使用下标或者迭代器遍历
std::string
中的字符:std::string str = "Hello"; // 使用下标 for (size_t i = 0; i < str.size(); ++i) { std::cout << str[i] << " "; } // 使用迭代器 for (auto it = str.begin(); it != str.end(); ++it) { std::cout << *it << " "; }
动态扩展与收缩
由于
std::string
是动态内存分配的,因此在字符串内容变化时,长度可以自动调整,而不需要手动处理内存分配或释放。成员函数
resize()
也可以手动改变字符串的大小:std::string str = "Hello"; str.resize(10, 'X'); // 将字符串扩展为长度 10,用 'X' 填充新位置,结果为 "HelloXXXXX"
总结
C++ 中的 std::string
是一个功能强大、易于使用的字符串处理工具。与 C 中的 char[]
相比,它提供了自动内存管理、更丰富的操作功能以及与 C 风格字符串的良好兼容性,使得字符串操作更加安全、高效和灵活。
Last updated