stringstream用法介绍
头文件
<sstream>
摘抄:
<sstream>
定义了三个类:istringstream、ostringstream 和 stringstream,分别用来进行流的输入、输出和输入输出操作。(本文以 stringstream 为主,介绍流的输入和输出操作。)
<sstream>
主要用来进行数据类型转换,由于 <sstream>
使用 string 对象来代替字符数组(snprintf方式),就避免缓冲区溢出的危险;而且,因为传入参数和目标对象的类型会被自动推导出来,所以不存在错误的格式化符的问题。简单说,相比c库的数据类型转换而言,<sstream>
更加安全、自动和直接。
定义
stringstream 变量名
数据类型转换
假设现在我们
stringstream ss;
int n;
string s;
然后我们ss<<n;
这句话的意思是将int类型的n放入输入流中,只是放入输入流,不是输入
我们再ss>>s
这个操作是从ss中抽取前面插入的int类型的值,赋值给string类型的s
附上代码:
#include<iostream>
#include<sstream>
using namespace std;
int main()
{
stringstream ss;
string s;
int n=123;
ss<<n;
ss>>s;
cout<<"n="<<n<<endl;
cout<<"s="<<s;
return 0;
}
多个字符串拼接
(其实本操作完全可以用string代替)
比如说,现在我们有两个字符串,分别是”string”和”stream”
现在我们将这两个字符串放入ss中
ss<<"string"<<"stream";
如果我们现在输出,输出的结果就是”stringstream”(注意:输出的时候要写成cout<<ss.str();
,把stringstream类型转换成string类型)
实际上,把多个字符串放入stringstream就可以达到拼接字符串的效果
#include<iostream>
#include<sstream>
using namespace std;
int main()
{
stringstream ss;
ss<<"string"<<"stream";
cout<<ss.str();
return 0;
}
现在我们把ss清空
ss.str("");
然后我们再把”I Love AcWing”这个字符串放进ss里
ss<<"I Love AcWing";
我们再输出一下
cout<<ss.str();
就会的得到”I Love AcWing”
(附上代码,大家可以自己试一下)
#include<iostream>
#include<sstream>
using namespace std;
int main()
{
stringstream ss;
ss<<"string"<<"stream";
cout<<ss.str()<<endl;
ss.str("");
ss<<"I Love AcWing";
cout<<ss.str();
return 0;
}
stringstream的清空
刚才上文提到了一种清空stringstream的方法
ss.str("");
还有一种方法,就是用clear()
使用的时候直接ss.clear();
即可
清空stringstream的目的其实就是重复利用同一个stringstream而不用去重复定义stringstream
注意:
ss.str("")和ss.clear()有不同的使用场景
ss.str("")适用于上面的场景,清空字符串
ss.clear()适用于进行多次数据类型的转换
(如果这两种混用,输出结果大家可以自己试一下)
这两种情况还有一种区别:
ss.str("")是清空stringstream
ss.clear()仅仅清空标志位,并没有释放内存。
下面给大家一段适用于ss.clear()
的代码
#include<iostream>
#include<sstream>
using namespace std;
int main()
{
stringstream ss;
int n,m;
ss<<"123";//将字符串"123"转换成int类型的123
ss>>n;
cout<<n<<endl;
ss.clear();//清空stringstream
ss<<true;//将bool转换成int
ss>>m;
cout<<m;
return 0;
}
其他用法
stringstream ssin(str)
这句话的意思是将str复制到ssin
但是这种用法经常使用于分割单词的场景(非常好用!!)
将一个字符串复制进来以后,再将ssin里的字符串放入输出流,因为遇到空格停止,所以就达到了分割单词的效果
#include<iostream>
#include<sstream>
using namespace std;
int main()
{
string str,abc;
getline(cin,str);
stringstream ss(str);
cout<<ss.str()<<endl;
while(ss>>abc)
{
cout<<abc<<endl;
}
return 0;
}
很详细,支持一下!
谢啦!!$☆⌒(*^-゜)v$