C++ 的 std::string 是一种动态且灵活的字符串容器,广泛应用于文本处理和字符串操作。本文通过一系列实际代码示例,展示 std::string 的创建、访问、修改、拼接、查找等功能,力求使你能运行代码并加深理解。
1. 创建与初始化字符串
以下示例展示如何用多种方式创建和初始化 std::string 对象:
#include <iostream>
#include <string>
int main()
{
// 默认构造一个空字符串
std::string emptyStr;
std::cout << "Empty string: \"" << emptyStr << "\"\n";
// 从C字符串构造
std::string helloStr("Hello, world!");
std::cout << "String from C-string: \"" << helloStr << "\"\n";
// 从另一个std::string构造
std::string copyStr = helloStr;
std::cout << "Copied string: \"" << copyStr << "\"\n";
// 重复某个字符
std::string repeatedStr(10, '*');
std::cout << "Repeated string: \"" << repeatedStr << "\"\n";
return 0;
}
运行结果:
Empty string: ""
String from C-string: "Hello, world!"
Copied string: "Hello, world!"
Repeated string: "**********"
2. 访问与修改字符串中的字符
std::string 支持类似数组的下标访问,同时提供安全的 at() 方法。以下示例演示如何访问和修改字符串内容:
#include <iostream>
#include <string>
int main() {
std::string str = "Hello, world!";
// 使用下标访问
std::cout << "First character: " << str[0] << "\n";
// 使用 at() 方法
std::cout << "Last character: " << str.at(str.size() - 1) << "\n";
// 修改字符
str[0] = 'h';
str.at(str.size() - 1) = '?';
std::cout << "Modified string: " << str << "\n";
return 0;
}
运行结果:
First character: H
Last character: !
Modified string: hello, world?
3. 字符串拼接
std::string 提供了 + 和 += 运算符,以及 append() 方法。以下示例展示如何拼接字符串:
#include <iostream>
#include <string>
int main() {
std::string str1 = "Hello";
std::string str2 = "World";
// 使用 + 运算符
std::string result = str1 + ", " + str2 + "!";
std::cout << "Concatenated string: " << result << "\n";
// 使用 += 运算符
str1 += ", ";
str1 += str2;
std::cout << "str1 after +=: " << str1 << "\n";
// 使用 append 方法
str2.append("!");
std::cout << "str2 after append: " << str2 << "\n";
return 0;
}
运行结果:
Concatenated string: Hello, World!
str1 after +=: Hello, World
str2 after append: World!
4. 查找与子串提取
std::string 提供了 find() 和 substr() 方法,用于查找子字符串和提取指定范围的子串。
#include <iostream>
#include <string>
int main() {
std::string text = "The quick brown fox jumps over the lazy dog";
// 查找子字符串的位置
size_t pos = text.find("fox");
if (pos != std::string::npos) {
std::cout << "'fox' found at position: " << pos << "\n";
}
// 提取子字符串
std::string sub = text.substr(16, 3); // 从位置16开始,提取3个字符
std::cout << "Extracted substring: " << sub << "\n";
return 0;
}
运行结果:
'fox' found at position: 16
Extracted substring: fox
5. 插入、删除和替换字符串
你可以插入新字符串,删除部分内容,或用新的内容替换旧内容:
#include <iostream>
#include <string>
int main() {
std::string str = "Hello, !";
// 插入字符串
str.insert(7, "world");
std::cout << "After insertion: " << str << "\n";
// 删除部分内容
str.erase(5, 2); // 删除 ", "
std::cout << "After erase: " << str << "\n";
// 替换部分内容
str.replace(6, 5, "C++");
std::cout << "After replace: " << str << "\n";
return 0;
}
输出结果:
After insertion: Hello, world!
After erase: Helloworld!
After replace: HellowC++
6. 比较字符串
std::string 支持比较运算符和 compare() 方法,用于字符串的字典序比较:
#include <iostream>
#include <string>
int main() {
std::string str1 = "apple";
std::string str2 = "banana";
// 使用比较运算符
if (str1 < str2) {
std::cout << str1 << " comes before " << str2 << " lexicographically.\n";
}
// 使用 compare 方法
int cmp = str1.compare(str2);
if (cmp < 0) {
std::cout << str1 << " is less than " << str2 << "\n";
}
return 0;
}
运行结果:
apple comes before banana lexicographically.
apple is less than banana
7. 获取大小与清空内容
以下示例展示如何检查字符串大小、清空字符串内容,并验证是否为空:
#include <iostream>
#include <string>
int main() {
std::string str = "Hello";
// 获取字符串大小
std::cout << "Size: " << str.size() << "\n";
// 清空字符串
str.clear();
std::cout << "After clear, size: " << str.size() << ", empty: " << std::boolalpha << str.empty() << "\n";
return 0;
}
运行结果:
Size: 5
After clear, size: 0, empty: true