• C++的sstream相关知识


    抠佽了一天就弄了这个:还不错总算是弄出来了。希望有建议和补充:我的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 }
  • 相关阅读:
    多表代换密码
    仿射变换
    LeetCode实战练习题目
    13.线性同余方程 扩展欧几里得算法
    12.扩展欧几里得算法
    11.快速幂求逆元
    10.快速幂
    9.筛法求欧拉函数
    8.欧拉函数
    7.最大公约数 欧几里得算法,也叫辗转相除法
  • 原文地址:https://www.cnblogs.com/sanghai/p/2775478.html
Copyright © 2020-2023  润新知