在C++ STL中,string
类提供了丰富的函数来处理字符串,以下是一些常用函数的详细介绍和使用方法,以及在算法竞赛中的使用细节和总结。
头文件
要使用 string
类,首先需要包含头文件:
#include <string>
构造函数
string
类提供了多种构造函数,可以初始化字符串:
- 使用字符串字面值初始化:
string myString = "Hello, World!";
- 使用已有
string
初始化:string original = "Hello"; string copy = original;
- 使用C风格字符串初始化:
const char* cstr = "C-style string"; string myString(cstr);
- 使用字符数组和长度初始化:
char arr[] = {'H', 'e', 'l', 'l', 'o'}; string myString(arr, 5);
访问/赋值
- 迭代器:
string
提供了迭代器来访问字符串中的每个字符。 - 下标/at:通过下标访问字符,
at
函数在越界时抛出异常。string str = "Hello"; char c = str[0]; // 'H' char c_at = str.at(0); // 'H'
- assign (赋值函数):重新赋值给字符串。
string str; str.assign("New Value");
- 连接符:使用
+
运算符连接字符串。string str1 = "Hello"; string str2 = "World"; string str3 = str1 + str2;
- swap (交换函数):交换两个字符串的内容。
string str1 = "Hello"; string str2 = "World"; str1.swap(str2);
长度/空间/容量相关函数
- size/length:返回字符串的长度。
string str = "Hello"; size_t length = str.size(); // 5
- capacity:返回字符串的容量。
size_t capacity = str.capacity(); // 可能大于length
- resize:重新设置字符串的大小。
str.resize(10); // 将字符串大小改为10
- reserve:预留足够的容量。
str.reserve(20); // 预留20个字符的空间
添加元素
- insert:在指定位置插入字符串或字符。
string str = "Hello"; str.insert(5, " World"); // "Hello World"
- append:在字符串末尾添加字符串或字符。
string str = "Hello"; str.append(" World"); // "Hello World"
删除元素
- erase:删除指定位置的字符或子串。
string str = "Hello World"; str.erase(5, 6); // "Hello "
更改数据
- replace:替换字符串中的某些字符。
string str = "Hello World"; str.replace(5, 5, "There"); // "Hello There"
- copy:复制字符串到字符数组。
string str = "Hello"; char buffer[10]; str.copy(buffer, 5);
查找数据
- find系列:查找子串或字符在字符串中的位置。
string str = "Hello World"; size_t pos = str.find("World"); // 返回6
- substr:获取子串。
string str = "Hello World"; string sub = str.substr(0, 5); // "Hello"
官方中对于string更加详细解释
string - C++ Reference
算法竞赛中的使用细节和总结
- 字符串拼接:在竞赛中,频繁使用
+
或append
进行字符串拼接,但注意+
可能会因为临时对象的创建而导致性能下降。 - 字符串输入输出:使用
cin >>
读取单词,getline(cin, str)
读取整行。 - 字符串长度:使用
size()
或length()
获取字符串长度,两者等价。 - 字符串比较:
string
重载了比较运算符,可以用于排序。 - 字符串查找和替换:
find
和substr
常用于处理子串问题,replace
用于替换操作。 - 性能考虑:对于大量字符串操作,考虑使用
reserve
避免不必要的内存分配。
以上是 string
头文件中各种函数的详细介绍和使用方法,以及在算法竞赛中的一些使用细节和总结。希望这些信息能帮助你更好地理解和使用 string
类。