C++ stringstream:实现任意数据类型之间的转换
程序员文章站
2024-03-18 08:23:46
...
1.int类型转string类
#include<iostream>
#include<sstream>
#include<string>
using namespace std;
int main()
{
int i=23412;
string str1("hhhhhh");
stringstream stream;
stream<<i;//把i的值给stream
stream>>str1;//把stream的值给str1
cout<<str1<<endl;
return 0;
}
2、字符数组和string相互转换
#include<iostream>
#include<sstream>
#include<string>
using namespace std;
int main()
{
char a[100]="hhhhhhhhh";
double k=3.1423;
stringstream stream;
stream<<k;
stream>>a;
cout<<a<<endl;
return 0;
}
3.如果流中是有空格的数,那么流要如何把值付给别的变量呢?
#include<iostream>
#include<sstream>
#include<string>
using namespace std;
int main()
{
string str1("wo hao shuai a a a a ");
string a1,a2,a3,a4;
stringstream stream(str1);
stream>>a1;
stream>>a2;
stream>>a3;
stream>>a4;
cout<<a1<<endl;//输出wo
cout<<a2<<endl;//输出hao
cout<<a3<<endl;//输出shuai
cout<<a4<<endl;//输出a
return 0;
}
由此可见,流中的数据以空格分割开,当给别人传输的时候,一次只穿空格之前的所有数据,并且依次向下。
4.重复用到同一个流时,千万要学会用流的.clear()
#include<iostream>
#include<sstream>
using namespace std;
int main()
{
int first(111),second(222);
stringstream stream;
stream<<first;
stream>>second;
cout<<second<<endl;//输出111
stream<<2345;
stream>>second;
stream>>k;
cout<<second<<endl;//还是111
return 0;
}
最可怕的其实是这个 如果不用clear(),那么当你再次往流里赋一个值,你猜猜会发生什么?
答案就是,什么也不会发生。你再次用stream给别的变量赋值,他还是会赋原来的那个值。
所以正确写法如下:
#include<iostream>
#include<sstream>
using namespace std;
int main()
{
int first(111),second(222);
stringstream stream;
stream<<first;
stream>>second;
cout<<second<<endl;//输出111
stream.clear();
stream<<2345;
stream>>second;
cout<<second<<endl;//2345,correct!
return 0;
}