在 C++ 中, 用于处理字符串的类 string
虽然有用很多和 STL 相似的性质和用法, 但是一般来说, 我们不认为它是 STL 的一份子, 因为实际上, string
并不是模板, 它其实是某个模板的实例, 即 basic_string<char>
. 因此, 这里我们单独讨论关于 string
类的一系列方法和属性, 但是需要知道, string
类在很多地方都与模板的函数或者属性很相似.
成员函数
元素访问
at() 返回char类型的字符
[] 返回char类型的字符
操作
push_back: 将字符添加到字符串结尾
pop_back: 移除末尾字符
类型转换
单个字符 char 转换到 string
单个字符无法直接转换成 string
:
可以通过以下两种方式间接转换:
字符数组
1
2char c = 'c'
char s1[2] = {c, '\0'}新建 string 对象
1
2
3char c = 'c';
std::string str = "a";
str[0] = c;
string 转换到其他类型
1 |
|
char 转换到其他类型
1 | // 这些函数不在 stirng 头文件中, 是 C 自身有的函数, 不需要加 std:: |
其他类型转换到 string
1 |
|
最简单的将int转换成string的方法
方法一:C风格的itoa1
2
3int a = 10;
char* intStr = itoa(a);
string str = string(intStr);
方法二:1
2
3
4int a = 10;
stringstream ss;
ss << a;
string str = ss.str();
方法三:C++风格的std::to_string1
2
3
4
std::string s = std::to_string(42);
auto s = std::to_string(42);
字符串流
典型应用: 二叉树的序列化和反序列化
stringstream
控制流的输入输出操作
istringstream
控制流的输入
ostringstream
控制流的输出
不确定数目的整数输入
持续输入, 自动忽略输入中的空白符(空格, 回车, 制表符), 下面的程序当遇到 99 时终止输入1
2std::vector<int> vec;
for (int a; std::cin >> a and a != 99; vec.emplace_back(a));
仅仅输入一行, 自动忽略输入中的空白符, 注意, 如果输入中存在其他字符, 例如分号, 逗号等, 那么 istringstream
的输出会在其他字符之前停止1
2
3
4
5
6
7
8
std::vector<double> vec;
string line;
std::getline(std::cin, line);
std::istringstream iss(line);
for (double v; iss > v; vec.emplace_back(v));