Stringstream小用法

警告
本文最后更新于 2021-07-31,文中内容可能已过时,请谨慎使用。

要使用stringstream必须包含<sstream>头文件 , 这个头文件包含ostringstreamistringstreamstringstream这三个类.

  • istringstream类用于执行C++风格的串流的输入操作
  • ostringstream类用于执行C风格的串流的输出操作
  • strstream类同时可以支持C风格的串流的输入输出操作

<sstream>主要用来进行数据类型转换,由于 <sstream> 使用 string 对象来代替字符数组(sprintf方式),就避免缓冲区溢出的危险;而且,因为传入参数和目标对象的类型会被自动推导出来,所以不存在错误的格式化符的问题 . 相比c库的数据类型转换而言,<sstream> 更加安全、自动和直接。

本文主要讨论stringstream的用法!

例如将string转换为int类型

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
#include <vector>
#include <sstream>

using namespace std;

int main(int argc, char const *argv[])
{
	string str_test;
	int data_test;
	//输入字符串
	getline(cin, str_test);
	//构建一个stringstream对象
	stringstream ss(str_test);

	//或者将ss作为输入流
	/*stringstream ss;
	ss << str_test;*/
	//将ss作为输入流,将string转换为int
	ss >> data_test;
	
	cout << data_test << endl;
	return 0;
}
/images/img/1627744185556-20210731230944.png
运行结果
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
#include <vector>
#include <sstream>

using namespace std;

int main(int argc, char const *argv[])
{
	string str_test;
	int number;
	int flag;
	//输入字符串
	getline(cin, str_test);

	//构建一个stringstream对象
	stringstream ss(str_test);
	string str;

	ss >> number; // 转化为int
	cout << number << endl;
	//清空ss缓冲
	ss.str("");
	cout << ss.str() << endl;

	//多次转化类型时需要使用clear()
	ss.clear();
	ss << true;//放入bool值
	ss >> flag;//转为int型
	cout << flag << endl;

	return 0;
}
/images/img/1627744331050-20210731231210.png
运行结果
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
#include <vector>
#include <sstream>

using namespace std;

int main(int argc, char const *argv[])
{
	string str_test;
	//输入字符串
	getline(cin, str_test);
	
	//构建一个stringstream对象
	stringstream ss(str_test);
	string str;
	vector<string> ans;

	//按空格分开
	while ( ss >> str )
	{
		ans.push_back(str);
	}

	for (string s : ans)
		cout << s << endl;

	return 0;
}
/images/img/1627744402829-20210731231322.png
运行结果

1.https://www.cnblogs.com/wuchanming/p/3906176.html

2.https://blog.csdn.net/liitdar/article/details/82598039