std::string
string 拼接/查找/替换、与 C 字符串互转、string_view
std::string
C++ 的 std::string 是 C 字符串的现代化身——动态扩容、边界安全、功能丰富。永远优先用它而不是 char*。
学完本章你将: 掌握 string 创建/拼接/比较、与 C 字符串互转、string_view。
基本操作
cpp
#include <iostream>
#include <string>
int main() {
std::string s1 = "Hello";
std::string s2("World");
std::string s3 = s1 + " " + s2; // "Hello World"
// 长度
std::cout << s3.length() << "\n"; // 11
std::cout << s3.size() << "\n"; // 同上
// 比较
if (s1 == "Hello") std::cout << "相等\n";
if (s1 < s2) std::cout << "字典序\n";
// 索引访问
std::cout << s3[0] << "\n"; // 'H'(不检查边界)
std::cout << s3.at(0) << "\n"; // 'H'(检查边界,安全)
return 0;
}
与 C 字符串互转
cpp
// C 字符串 → std::string
const char *cstr = "hello";
std::string s = cstr;
// std::string → C 字符串
const char *back = s.c_str(); // 返回 const char*
// 注意:c_str() 返回的指针在 s 被修改后可能失效
string_view(C++17)—— 免拷贝的只读视图
cpp
#include <string_view>
// 不拷贝字符串,只记录指针 + 长度
void print(std::string_view sv) {
std::cout << sv << "\n";
}
int main() {
std::string s = "Hello World";
print(s); // 传 string ✓
print("literal"); // 传字面量 ✓
print(s.substr(0, 5)); // 传子串 ✓(不额外拷贝!)
return 0;
}
💡 函数参数要读字符串时,优先用
std::string_view——可以兼容 string、char*、字面量,且零拷贝。