浅谈sstream头文件

        在使用istreamstring,ostreamstring,streamstring的时候要用到sstream这个头文件。

        在刚开始使用的时候很蒙,完全不会用,现在来谈一下这个很棒的头文件。

        sstream这是一个字符串流,经常用于格式转换,包含了istream,ostream这些个函数,从字面就可以看出,istream是输入,ostream是输出。

  1. #include <iostream>
  2. #include <string>
  3. #include <sstream>
  4. using namespace std;

  5. int main()
  6. {
  7.     int a, b;
  8.     string Str1, Str2;
  9.     string Input = "abc 123 bcd 456 sss 999";
  10.    
  11.     //ostringstream 对象用来进行格式化的输出,可以方便的将各种类型转换为string类型
  12.     //ostringstream 只支持 << 操作符
  13.     //格式化输出
  14.     ostringstream oss;
  15.     oss << 3.14;
  16.     oss << "  ";
  17.     oss << 55555555;
  18.     oss << endl;
  19.     cout  << oss.str();
  20.    
  21.     //double型转化为字符串
  22.     oss.str("");//每次使用前清空,oss.clear() 并不能清空内存
  23.     oss << 3.1234234234;
  24.     Str2 = oss.str();
  25.     cout << Str2 << endl;

  26.     //int型转化为字符串
  27.     oss.str("");
  28.     oss << 1234567;
  29.     Str2 = oss.str();
  30.     cout << Str2 << endl;

  31.    
  32.     //istringstream 对象用来把一个已定字符串中的以空格隔开的内容提取出来
  33.     //istringstream 只支持 >> 操作符

  34.     istringstream iss(Input);//通过构造函数对istringstream类进行赋值,可以将一个字符串变量的值传递给istringstream对象
  35.     //若传入的字符串是常量,也可以进行如下赋值
  36.     //iss.str("ccc 555 aaa 333");
  37.     //扩展,iss对象支持对C语言流的操作,所以也可以进行如下的赋值
  38.     //iss.str(Input.c_str());
  39.     while(iss >> Str1 >> a)
  40.     {
  41.         cout << Str1 << "  " << a << endl;
  42.     }

  43.     //stringstream类
  44.     //该类就是上述istringstream和ostringstream类的综合,支持<<, >>操作符,可以进行字符串到其它类型的快速转换
  45.     stringstream ss;
  46.     ss << Input;
  47.     while(ss >> Str1 >> a)
  48.     {
  49.         cout << Str1 << " " << a << endl;
  50.     }

  51.     //总结这几个类istringstream, ostringstream, stringstream, 包含在<sstream>文件里
  52.     //输入方式:
  53.     //1.构造函数。iss, oss, ss 都支持。eg. istreamstring iss(Input), ostreamstring(Input), stringstream ss(Input)
  54.     //2.<< 操作符。oss, ss 支持。 oss << Input, ss << Input;
  55.     //3. .Str()函数,提供C中的字符串头指针,或者匿名内存首地址
  56.     //  eg. iss.str(Input.c_str()), iss.str("abc 123 345")
  57.     //      oss.str(Input.c_str()), oss.str("abc 123 345")
  58.     //      ss.str(Input.c_str()), ss.str("abc 123 345")

  59.     //输出方式:
  60.     //1. 通过.str()得到一份拷贝
  61.     //eg. Str1 = iss.str(), Str1 = oss.str(), Str1 = ss.str();
  62.     // 显然,这个也提供C语言的接口
  63.     //  printf("%s", iss.str().c_str()),  printf("%s", oss.str().c_str()),  printf("%s", ss.str().c_str())
  64.     //2. >>操作符, iss和ss支持该操作
  65.    
  66.     //每次不同的使用时刻必须要清空
  67.     //ss.str(""), iss.str(""), oss.str(""),暂时没有发现其它的清空方法
  68.    
  69.     //最大的用处
  70.     //输入string类型,可以通过iss 或 ss 类提取出来,功能类似于C语言中的sscanf()函数, 在TC中比较常见
  71.     //提供字符串和各种类型之间的转换
  72.     return 0;
  73. }

  • 9
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
本人收集: C/C++头文件一览 C、传统 C++ #include <assert.h>    //设定插入点 #include <ctype.h>     //字符处理 #include <errno.h>     //定义错误码 #include <float.h>     //浮点数处理 #include <fstream.h>    //文件输入/输出 #include <iomanip.h>    //参数化输入/输出 #include <iostream.h>   //数据流输入/输出 #include <limits.h>    //定义各种数据类型最值常量 #include <locale.h>    //定义本地化函数 #include <math.h>     //定义数学函数 #include <stdio.h>     //定义输入/输出函数 #include <stdlib.h>    //定义杂项函数及内存分配函数 #include <string.h>    //字符串处理 #include <strstrea.h>   //基于数组的输入/输出 #include <time.h>     //定义关于时间的函数 #include <wchar.h>     //宽字符处理及输入/输出 #include <wctype.h>    //宽字符分类 ////////////////////////////////////////////////////////////////////////// 标准 C++ (同上的不再注释) #include <algorithm>    //STL 通用算法 #include <bitset>     //STL 位集容器 #include <cctype> #include <cerrno> #include <clocale> #include <cmath> #include <complex>     //复数类 #include <cstdio> #include <cstdlib> #include <cstring> #include <ctime> #include <deque>      //STL 双端队列容器 #include <exception>    //异常处理类 #include <fstream> #include <functional>   //STL 定义运算函数(代替运算符) #include <limits> #include <list>      //STL 线性列表容器 #include <map>       //STL 映射容器 #include <iomanip> #include <ios>       //基本输入/输出支持 #include <iosfwd>     //输入/输出系统使用的前置声明 #include <iostream> #include <istream>     //基本输入流 #include <ostream>     //基本输出流 #include <queue>      //STL 队列容器 #include <set>       //STL 集合容器 #include <sstream>     //基于字符串的流 #include <stack>      //STL 堆栈容器     #include <stdexcept>    //标准异常类 #include <streambuf>    //底层输入/输出支持 #include <string>     //字符串类 #include <utility>     //STL 通用模板类 #include <vector>     //STL 动态数组容器 #include <cwchar> #include <cwctype> using namespace std; ////////////////////////////////////////////////////////////////////////// C99 增加 #include <complex.h>   //复数处理 #include <fenv.h>    //浮点环境 #include <inttypes.h>  //整数格式转换 #include <stdbool.h>   //布尔环境 #include <stdint.h>   //整型环境 #include <tgmath.h>   //通用类型数学宏

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值