std::string str1; // 默认构造函数
std::string str2("Hello"); // 从C-string创建string
std::string str3(str2); // 拷贝构造函数
std::string str;
str = "Hello, World!";
str.assign("New Value");
//下标运算符[]提供直接的访问,但它不会检查下标是否越界。越界访问是未定义行为,它不会提供任何安全检查,所以使用时要确保索引合法
std::string str = "Hello, World!";
char c1 = str[0]; // 访问第一个字符,'H'
char c2 = str[str.size() - 1]; // 访问最后一个字符,'!'
//at成员函数与下标运算符相似,但at将会检查给定的下标是否在有效范围内。如果下标越界,at会抛出一个std::out_of_range异常。
char c1 = str.at(0); // 访问第一个字符,'H'
char c2 = str.at(str.size() - 1); // 访问最后一个字符,'!'
str[0] = 'h'; // 将第一个字符修改为'h';在使用下标运算符进行修改时应当小心,避免越界写入,
str.at(1) = 'e'; // 将第二个字符修改为'e'
// 使用迭代器
for (auto it = str.begin(); it != str.end(); ++it) {
std::cout << *it;
}
for (std::string::iterator it = str.begin(); it != str.end(); ++it) {
std::cout << *it;
}
// 使用常量迭代器遍历字符串,不会修改字符串的内容
for (std::string::const_iterator it = str.cbegin(); it != str.cend(); ++it) {
std::cout << *it;
}
// 使用范围基于for循环
for (auto ch : str) {
std::cout << ch;
}
//应确保字符串不是空的,否则访问结果是未定义的
char first = str.front(); // 获取第一个字符
char last = str.back(); // 获取最后一个字符
访问字符串的底层字符数组,可以通过 c_str 或 data 方法来实现
//c_str返回的指针指向字符串的内部数据,该数据由std::string对象管理,因此不应使用该指针修改数据或超出其生命周期使用指针
const char* c_str = str.c_str(); // 获取C风格字符串
std::string s1 = "Hello";
std::string s2 = ", World!";
std::string joined = s1 + s2;
s1 += s2;
str.erase(0, 5); // 从0位置开始,擦除5个字符
str.replace(0, 5, "Hi"); // 将字符串前5个字符替换为"Hi"
size_t pos = str.find("World"); // 查找"World"首次出现的位置
std::string sub = str.substr(0, 5); // 从位置0开始,长度为5的子串
str.insert(0, "Start: "); // 在字符串开头插入"Start: "
std::string str1 = "Hello";
std::string str2 = "Hello";
std::string str3 = "World";
std::string str4 = "Hello, World!";
int result = str4.compare(7, 5, str3); // result == 0,子串 "World" 和 str4 相等
bool isEqual = (str1 == str2); // true 比较str1与str2是否相等
bool isNotEqual = (str1 != str3); // true
int result = str1.compare(str3); // 字典序比较str1与str3; result < 0,因为 "Hello" < "World"
C++ 中字符串是区分大小写的,在默认情况下进行比较时,“Hello”和“hello”会被判断为不相等。如需进行不区分大小写的比较,需要实现或使用标准库支持的比较函数,将字符串转换为统一的大小写后再进行比较。
通过标准库函数中的tolower和toupper函数结合标准算法std::transform来实现大小写转换
std::string str = "Hello, World!";
// 转换为小写
std::transform(str.begin(), str.end(), str.begin(),
[](unsigned char c) { return std::tolower(c); });
// 转换为大写
std::transform(str.begin(), str.end(), str.begin(),
[](unsigned char c) { return std::toupper(c); });
size_t len = str.length(); // 或者使用 str.size();
str.clear(); // 清除字符串内容,变为空字符串
bool is_empty = str.empty(); // 如果字符串长度为0,则返回true
const char* c_str = str.c_str(); // 获取C-style字符串