抠佽了一天就弄了这个:还不错总算是弄出来了。希望有建议和补充:我的CSDN博客链接:桑海的CSDN博客
1 #include<iostream>
2 #include<sstream> //stringstream
3 #include<cstdio> //sscanf,sprintf()
4 using namespace std;
5
6 int main()
7 {
8 //*************************************************block1**********************************************************************
9
10 stringstream stream("123 3.14 hello"); //不同的数以空而分开,123是第一个数;hello是第三个数
11 int ival;
12 double dval;
13 string str;
14 //将其中的整型提取出来写入到整型变量ival中,浮点型提取出来写入到浮点型dval中,字符型到string中
15 //原则是序号对应,如提取stream对象中的第一个与ival对应。stream与第三个str对照。
16 //如果相对应的类型不同,则自动转化为相应的类型。如下:将123转化为字符型;3.14转化为整型;hello转化为浮点型;相当于C中的sprintf函数的作用。
17 stream >> str >> ival >> dval;
18 cout << str << "\t" << ival << "\t" << dval << endl;
19
20 stream.clear(); //回复stream的初始状态,以便继续对stream对象进行操作。(小沈阳说:这个必须有)
21
22 //重新对stream对象进行操作,再次之前必须对有stream.clear();对其状态标志进行初始化。
23
24 //*************************************************block2**********************************************************************
25
26
27 //*************************************************TEST1*************************************************************************
28 // stream.str("");//每次读入新数前,将stream对象置为空,方便重新操作。其执行过程是如果stream对象不为空, ^ . ^ 1
29 //则从第一个位置开始用新值掉替换原来的值,剩余的继续输出。如本例如果没有上一行的置空操作则输出: Sanghai4 hello。与上一次的输入对照可知。
30 // 123 3.14 hello
31 //*************************************************test1*************************************************************************
32
33
34 int ival1;
35 string str1, s;
36 cout << "Enter a string:" << endl;
37 cin >> s;
38 stream.str(s); //stream.str(s)带参函数的意思是,用s的副本初始化stream对象,即覆盖掉原来的值
39 cout << stream.str() << endl;
40 stream >> ival1;
41 cout << ival1 << endl; //2293512、4665524
42 stream.clear(); //重置stream为初始状态
43
44 //*************************************************TEST2*************************************************************************
45 //向stream对象中插入字符
46 //stream.str("");
47 stream << "Sang";//put操作时stream对象的第一个位置开始操作,如果stream对象不为空,则修改向相应位置的值为新值
48 //put操作紧接着新输入的数据后面进行插入,如果新输入后面还有老数据(上一次的数据)则替换。
49 //例如本例中,如果没有stream << "Sang";则输出.ang;如果有的话,则输出sang.ai
50 stream.put('.'); //put函数与空白符自动结束,并忽略空白符(空格、制表符、换行符) //此处参考记忆空间的博客:点击打开链接
51
52 //综上,一般还是需要stream.str("")操作的,可以避免出错,还可以节省资源
53 //*************************************************test2*************************************************************************
54
55 string str2;
56 stream >> str2; //stream中自动忽略空白符
57 cout << str2 << endl; //变相的相当于向string对象中插入单个字符
58 stream.clear(); //重置stream为初始状态
59
60 //*************************************************block3**********************************************************************
61 //此处参考lw02nju的专栏的博客:链接如下:点击打开链接
62 //一下不在赘述,通用模版如下:将in_value值转换为out_type类型string、char、int、double、float、long之间都可以互相转化。
63 /*
64 template<class out_type,class in_value>
65
66 out_type convert(const in_value & t)
67 {
68 stringstream stream;
69 stream<<t;//向流中传值
70 out_type result;//这里存储转换结果
71 stream>>result;//向result中写入值
72 return result;
73 }
74 */
75 //*************************************************block2**********************************************************************
76 return 0;
77 }
原文链接: https://www.cnblogs.com/sanghai/archive/2012/11/17/2775478.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/69702
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!