C++ <string> 标头文件详解
目录
- 1. <string> 的基本介绍
- 2. 创建和初始化字符串
- 3. 字符串的基本操作
- 3.1 连接字符串
- 3.2 获取字符串长度
- 3.3 访问和修改字符
- 3.4 字符串比较
- 4. 常用字符串成员函数
- 4.1 append()
- 4.2 insert()
- 4.3 erase()
- 4.4 substr()
- 4.5 find() 和 rfind()
- 4.6 replace()
- 5. 字符串转换
- 5.1 数字转字符串
- 5.2 字符串转数字
- 6. 遍历字符串
- 7.大小写转换
- 8. std::string 和 C 风格字符串的互操作
- 9. 总结
1. 的基本介绍
是 C++ 标准库中的头文件之一,定义了 std::string 类。std::string 是一个动态大小的字符序列,可以像数组一样通过下标访问字符,同时支持自动内存管理。在 C++ 中,std::string 替代了 C 风格的字符串(字符数组),让我们能够更方便、灵活地处理文本数据。
2. 创建和初始化字符串
std::string 支持多种初始化方式:
#include <iostream>
#include <string>int main() {std::string str1 = "Hello, World!"; // 直接初始化std::string str2("Hello, C++"); // 构造函数初始化std::string str3(10, 'A'); // 用字符 'A' 初始化10次,得到 "AAAAAAAAAA"std::string str4 = str1; // 复制初始化std::cout << "str1: " << str1 << "\n";std::cout << "str2: " << str2 << "\n";std::cout << "str3: " << str3 << "\n";std::cout << "str4: " << str4 << "\n";return 0;
}
3. 字符串的基本操作
3.1 连接字符串
可以使用 + 操作符来连接字符串:
std::string str1 = "Hello";
std::string str2 = " World";
std::string result = str1 + str2; // "Hello World"
3.2 获取字符串长度
使用 size() 或 length() 获取字符串的长度:
std::string str = "Hello";
std::cout << "Length: " << str.size() << "\n"; // 输出:Length: 5
3.3 访问和修改字符
可以通过下标访问和修改字符串中的字符:
std::string str = "Hello";
str[0] = 'h';
std::cout << str << "\n"; // 输出:hello
3.4 字符串比较
std::string 提供了直接比较运算符,支持 ==、!=、<、> 等操作符来比较字符串的字典顺序。
std::string str1 = "Apple";
std::string str2 = "Banana";
if (str1 < str2) {std::cout << "Apple comes before Banana\n";
}
4. 常用字符串成员函数
4.1 append()
用于在字符串末尾追加内容。
std::string str = "Hello";
str.append(" World");
std::cout << str << "\n"; // 输出:Hello World
4.2 insert()
用于在指定位置插入字符串。
std::string str = "Hello World";
str.insert(5, ", C++");
std::cout << str << "\n"; // 输出:Hello, C++ World
4.3 erase()
用于删除字符串中的指定字符。
std::string str = "Hello, C++ World";
str.erase(5, 5); // 从位置5开始,删除5个字符
std::cout << str << "\n"; // 输出:Hello World
4.4 substr()
用于提取字符串中的子串。
std::string str = "Hello, World";
std::string sub = str.substr(0, 5); // 提取从位置0开始的5个字符
std::cout << sub << "\n"; // 输出:Hello
4.5 find() 和 rfind()
用于查找子字符串的位置。
std::string str = "Hello, World";
size_t pos = str.find("World");
if (pos != std::string::npos) {std::cout << "Found 'World' at position: " << pos << "\n";
}
4.6 replace()
用于替换字符串中的某个部分。
std::string str = "Hello, C++";
str.replace(7, 3, "World"); // 从位置7开始,替换3个字符为"World"
std::cout << str << "\n"; // 输出:Hello, World
5. 字符串转换
5.1 数字转字符串
可以使用 std::to_string() 将数字转换为字符串:
int num = 42;
std::string str = std::to_string(num);
std::cout << str << "\n"; // 输出:42
5.2 字符串转数字
可以使用 std::stoi、std::stof、std::stod 等函数将字符串转换为数字:
std::string str = "42";
int num = std::stoi(str);
std::cout << num << "\n"; // 输出:42
6. 遍历字符串
可以用 for 循环或基于范围的 for 循环遍历字符串中的每个字符:
std::string str = "Hello";
for (char c : str) {std::cout << c << ' ';
}
// 输出:H e l l o
7.大小写转换
在 C++ 中,可以使用 库中的 std::toupper 和 std::tolower 函数将字符串转换为大写或小写。这两个函数会将一个字符转换为大写或小写,配合 for 循环可以轻松实现对整个字符串的转换。
#include <iostream>
#include <string>
#include <cctype> // 包含 toupper 和 tolower 函数int main() {std::string str = "Hello, World!";for (char &c : str) {c = std::toupper(c); // 转换每个字符为大写}std::cout << "Uppercase: " << str << "\n"; // 输出:HELLO, WORLD!return 0;
}
8. std::string 和 C 风格字符串的互操作
使用 c_str() 函数可以获得 std::string 对应的 C 风格字符串:
std::string str = "Hello";
const char* cstr = str.c_str();
printf("%s\n", cstr); // 使用 printf 输出 C 风格字符串
可以直接用 std::string 的构造函数从 C 风格字符串初始化:
const char* cstr = "Hello";
std::string str(cstr);
9. 总结
std::string 是一个功能丰富、强大的类,极大简化了 C++ 中的字符串处理。通过std::string,我们可以轻松完成字符串的创建、修改、查找、转换等操作,而不用担心手动管理内存。