C++的sstream相关知识
2016-01-28 13:45
465 查看
#include<iostream> #include<sstream> //stringstream #include<cstdio> //sscanf,sprintf() using namespace std; int main() { //*************************************************block1********************************************************************** stringstream stream("123 3.14 hello"); //不同的数以空而分开,123是第一个数;hello是第三个数 int ival; double dval; string str; //将其中的整型提取出来写入到整型变量ival中,浮点型提取出来写入到浮点型dval中,字符型到string中 //原则是序号对应,如提取stream对象中的第一个与ival对应。stream与第三个str对照。 //如果相对应的类型不同,则自动转化为相应的类型。如下:将123转化为字符型;3.14转化为整型;hello转化为浮点型;相当于C中的sprintf函数的作用。 stream >> str >> ival >> dval; cout << str << "\t" << ival << "\t" << dval << endl; stream.clear(); //回复stream的初始状态,以便继续对stream对象进行操作。(小沈阳说:这个必须有) //重新对stream对象进行操作,再次之前必须对有stream.clear();对其状态标志进行初始化。 //*************************************************block2********************************************************************** //*************************************************TEST1************************************************************************* // stream.str("");//每次读入新数前,将stream对象置为空,方便重新操作。其执行过程是如果stream对象不为空, ^ . ^ 1 //则从第一个位置开始用新值掉替换原来的值,剩余的继续输出。如本例如果没有上一行的置空操作则输出: Sanghai4 hello。与上一次的输入对照可知。 // 123 3.14 hello //*************************************************test1************************************************************************* int ival1; string str1, s; cout << "Enter a string:" << endl; cin >> s; stream.str(s); //stream.str(s)带参函数的意思是,用s的副本初始化stream对象,即覆盖掉原来的值 cout << stream.str() << endl; stream >> ival1; cout << ival1 << endl; //2293512、4665524 stream.clear(); //重置stream为初始状态 //*************************************************TEST2************************************************************************* //向stream对象中插入字符 //stream.str(""); stream << "Sang";//put操作时stream对象的第一个位置开始操作,如果stream对象不为空,则修改向相应位置的值为新值 //put操作紧接着新输入的数据后面进行插入,如果新输入后面还有老数据(上一次的数据)则替换。 //例如本例中,如果没有stream << "Sang";则输出.ang;如果有的话,则输出sang.ai stream.put('.'); //put函数与空白符自动结束,并忽略空白符(空格、制表符、换行符) //此处参考记忆空间的博客:点击打开链接 //综上,一般还是需要stream.str("")操作的,可以避免出错,还可以节省资源 //*************************************************test2************************************************************************* string str2; stream >> str2; //stream中自动忽略空白符 cout << str2 << endl; //变相的相当于向string对象中插入单个字符 stream.clear(); //重置stream为初始状态 //*************************************************block3********************************************************************** //此处参考lw02nju的专栏的博客:链接如下:点击打开链接 //一下不在赘述,通用模版如下:将in_value值转换为out_type类型string、char、int、double、float、long之间都可以互相转化。 /* template<class out_type,class in_value> out_type convert(const in_value & t) { stringstream stream; stream<<t;//向流中传值 out_type result;//这里存储转换结果 stream>>result;//向result中写入值 return result; } */ //*************************************************block2********************************************************************** return 0; }
相关文章推荐
- C++编程日记
- C++面试(六)
- STL 之 C++ Map容器的简单使用方法
- c++笔记第一篇
- C++中cin、cin.get()、cin.getline()、getline()、gets()等
- C语言文件操作解析(二)
- C语言文件操作解析(一)
- C++必读书籍推荐
- 指针参数传递
- C++类编程(一)
- C++泛型函数:函数模板
- C++还能重新辉煌吗?C++复杂性的思考
- vector<Point2d> 详解
- C++模板:模板类
- C/C++编码规范
- c++如何批量修改文件后缀名
- DES加密的C语言实现
- c++避免隐式转换
- sprintf 使用不当越界修改内存
- atlsimpstr.h 的Release()报错