C++ stringstream:实现任意数据类型之间的转换

原文链接

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;
}

猜你喜欢

转载自blog.csdn.net/qq_44378854/article/details/114376301