字符串 string
标准模板库中的 <string> 头文件提供了一系列和字符串有关的操作,它可以定义一个动态内存的字符串。
基本操作
字符串的初始化
使用 std::string s 定义一个字符串。当指定 using namespace std 后,std:: 可省略。字符串有如下常用初始化方法:
string s1 = "Hello World"或string s1("Hello World")从字面量"Hello World"初始化字符串,但标准模板库的string不包含最后的\0。string s2 = s1从其他字符串创建拷贝string s3(5, 'a')初始化为连续 5 个a字符,即aaaaa
字符串的操作
基本操作
std::cin >> s和std::cout << s:输入输出getline(std::cin, s)从标准输入读取一行赋给sgetline读取时,包括stdin的换行符也会被读取,但换行符不会赋给s
s.size()返回字符串字符数s[i]返回第 i 个字符的引用s1 < s2按字典序比较字符串- 该比较从两个字符串开头开始,返回第一对相异字符的比较
- 如果
s1的长度 m 小于s2的长度 n,而两者前 m 个字符相等,则s1小于s2
拼接
定义 s1 和 s2 后,使用 s = s1 + s2 可以实现两个字符串的拼接。
两个操作数中允许其中一个是字面量,如 s = s1 + "abc",但不能两个都是字面量,因为 C 的字符数组没有定义加法,此时应该先将一个转化为 string,例如:
// string s = "abc" + "123"; 错误
string s = string("abc") + "123";
搜索 find
流行实现是 KMP 算法,设 s 的长度是 n,则查找的平均复杂度是 O(n),与子串长度无关。
s.find(s1)在字符串s中寻找s1第一次出现的位置。s.find(s1, pos)从字符串s的第pos个位置开始寻找。
与数值进行转换
C++11 开始,<string> 库中提供了 to_string 函数,用于将整数和浮点数转换为字符串;也提供了 stoi、stoll、stoull 用于将字符串转换为整数(int、long long 和 unsigned long long 类型)
这种转换不需要手动编写函数,也不需要经过 stringstream 绕一圈,更加方便。
stoi 等函数还可以指定参数的进制,使用格式为:
stoi(s, pos, base)
其中第二个参数默认为 nullptr,第三个参数可以指定进制。
BEYOND THE ARTICLE
读完了,有什么想法?
阅读已保存的问答示例,并循着引用回到原文。
— 本文完 — 返回文章列表