1.头文件:
#include<sstream>
2.了解定义
首先要知道 stringstream ss(str) 是啥意思,创建存储str的副本的 stringstream 对象,其中str是 string 类型的对象。
3.了解ss.str()
streamstring在调用str()时,会返回临时的string对象。而因为是临时的对象,所以它在整个表达式结束后将会被析构。
如果需要进一步操作string对象,先把其值赋给一个string变量后再操作。
#include<iostream>
#include<sstream>
#include<cstring>
using namespace std;
int main()
{
stringstream ss("abcdefg0123456789234567890gda1234567890145678901234567890123456789");
//错误用法
const char* cstr1 = ss.str().c_str();
cout<<cstr1<<endl;
//正确用法
const string& str2 = ss.str();
const char* cstr2 = str2.c_str();//转换成char类型字符串
cout<<cstr2<<endl;
return 0;
}
3.stringstream 的清空问题
在C++中可以使用stringstream来很方便的进行类型转换,字符串串接,不过注意重复使用同一个stringstream对象时要 先继续清 空,而清空很容易想到是clear方法,而在stringstream中这个方法实际上是清空stringstream的状态(比如出错等),真 正清空内 容需要使用.str("")方法。
4.stringstream对象的使用
#include<iostream>
#include<sstream>
#include<cstring>
using namespace std;
int main()
{
string a,b;
while(getline(cin,a)){
stringstream ss(a);//创建一个流
cout<<ss.str()<<endl;
while(ss>>b){//把值传递流中
cout<<b<<endl;
}
}
return 0;
}
5.stringstream 提供的转换格式
#include<iostream>
#include<sstream>
#include<cstring>
using namespace std;
int main()
{
//将int类型读入ss 变为string类型
int a=520;
int b=521;
stringstream ss;
ss<<"a= "<<a<<'\n';//"a= "此处有空格,字符串流是通过空格判断一个字符串的结束
ss<<"b= "<<b;
cout<<ss.str()<<endl;
//提取520 521保存为int 类型,当然c d 声明为string类型 ,那么这俩个字面常量相应的保存为string类型
int c,d;
string s;
ss>>s>>c>>s>>d;
cout<<c<<" "<<d<<endl;
return 0;
}
6.stringstream的清空
#include<iostream>
#include<sstream>
#include<cstring>
using namespace std;
int main()
{
stringstream ss;
string s;
ss<<"fsajfsdfsa fdsa fdsaf";
ss>>s;
cout<<"size= "<<ss.str().length()<<endl;
cout<<s<<endl;
ss.str("");
cout<<"size= "<<ss.str().length()<<endl;
return 0;
}
7.作用:
比sscanf()和sprintf()要好用 ;
其实就是类型转换可以转换任意类型 比如 int double string .....