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