欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

相关标签: C++