STL之sstream的用法

说在前面:

库定义了三种类:istringstream、ostringstream和stringstream,分别用来进行流的输入、输出和输入输出操作。另外,每个类都有一个对应的宽字符集版本。注意,使用string对象来代替字符数组。这样可以避免缓冲区溢出的危险。而且,传入参数和目标对象的类型被自动推导出来,即使使用了不正确的格式化符也没有危险。

使用时必须加上#include<sstream>

  • stringstream 对象用于输入一行字符串,以 空格 为分隔符把该行分隔开来

    #include <iostream>
    #include <stack>
    #include <sstream>
    using namespace std;
    int main()
    {
    string str= "hello world I am very happy!";
    stringstream sstream(str); //sstream<<
    while (sstream)
    {
    string substr;
    sstream>>substr;
    cout << substr <<" "; //也可vec.push_back(substr);
    }
    return 0;
    }
    // 输出详解:
    hello world I am very happy!
    // 大家可能会问这有什么用,如果配上栈结构便能将这个逆序输出:
    #include <iostream>
    #include <stack>
    #include <sstream>
    using namespace std;
    int main()
    {
    string str= "hello world I am very happy !",tmp;
    stringstream sstream(str);
    stack<string> s;
    while(sstream>>tmp)
    {
    s.push(tmp);
    }
    while(!s.empty())
    {
    cout<<s.top();
    s.pop();
    if(s.size()!=0)
    cout<<" ";
    }
    cout<<endl;
    return 0;
    }
    // 输出结果:
    ! happy very am I world hello
  • 类型转换

    利用stringstream进行常见类型转换

    ​ (int、long、float、double、long double、long long)

/-----string转int-----/
string str= "123456789";
stringstream sstream(str);
int tmp;
sstream>>tmp;
cout<<tmp<<endl; // 输出结果123456789
/-----int转string-----/
int tmp=123456;
stringstream t;
string s;
t<<tmp;
t>>s;
cout<<s<<endl; // 输出结果123456
/-----int转char-----/
int tmp=123456;
stringstream t;
char s[10];
t<<tmp;
t>>s;
for(int i=0;i<strlen(s);i++)
cout<<s[i]; // 输出结果123456
/-----char转int-----/
stringstream t;
char s='8';
int tmp;
t<<s;
t>>tmp;
cout<<tmp;
return 0; // 输出8;
  • 利用to_string() 进行常见类型转换, 返回值为string

    函数原型:(C++11才有这个函数)

    string to_string (int val);

    string to_string (long val);

    string to_string (long long val);

    string to_string (unsigned val);

    string to_string (unsigned long val);

    string to_string (unsigned long long val);

    string to_string (float val);

    string to_string (double val);

    string to_string (long double val);

    功能:

    将数值转化为字符串。返回对应的字符串。

    例子:

  • s1=to_string(10.5);                        //double到string
    s2=to_string(123);                        //int到string
    s3=to_string(true);                     //bool到string
    #include <iostream>
    #include <stack>
    #include <sstream>
    #include <cstring>
    #include <iomanip>
    using namespace std;
    int main()
    {
    string s1,s2,s3;
    s1=to_string(10.5); //double到string
    s2=to_string(123);//int到string
    s3=to_string(true);//bool到string
    cout<<fixed<<showpoint<<setprecision(1);
    cout<<s1<<" "<<s2<<" "<<s3<<endl;
    return 0;
    }
    // 10.500000 123 1
    重复利用stringstream对象

    如果你打算在多次转换中使用同一个stringstream对象,记住再每次转换前要使用clear()方法;

    在多次转换中重复使用同一个stringstream(而不是每次都创建一个新的对象)对象最大的好处在于效率。stringstream对象的构造和析构函数通常是非常耗费CPU时间的。

    #include <iostream>
    #include <stack>
    #include <sstream>
    #include <cstring>
    using namespace std;
    int main()
    {
    stringstream stream;
    int first;
    string second;
    stream<< "456"; //插入字符串
    stream >> first; //转换成int
    cout << first << endl;
    stream.clear(); //在进行多次转换前,必须清除stream,否则第二个数据可能输出乱码
    stream << "true"; //插入bool值
    stream >> second; //提取出int
    cout << second << endl;
    return 0;
    }
    // 输出结果:
    456
    true

STL之sstream的用法的更多相关文章

  1. STL中mem_fun, mem_fun_ref用法

    1.引言 先看一个STL中for_each的用法: #include <iostream> #include <vector> #include <algorithm&g ...

  2. STL中间set具体用法!!!!

    1.关于set C++ STL 之所以得到广泛的赞誉,也被非常多人使用.不仅仅是提供了像vector, string, list等方便的容器,更重要的是STL封装了很多复杂的数据结构算法和大量经常使用 ...

  3. STL中map的用法

    map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候 ...

  4. STL——map/unordered_map基础用法

    map /multimap map是STL里重要容器之一. 它的特性总结来讲就是:所有元素都会根据元素的键值key自动排序(也可根据自定义的仿函数进行自定义排序),其中的每个元素都是<key,  ...

  5. STL中erase()的用法

    erase()是STL提供的容器中比较常用的方法之一,它的功能是删除容器中的某些元素,其中它的函数原型如下: 1.有两个参数,且参数类型都是size_t型: string& erase ( s ...

  6. STL 之 map的用法

    Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候 ...

  7. STL源代码学习--vector用法汇总

    一.容器vector 使用vector你必须包含头文件<vector>: #include<vector> 型别vector是一个定义于namespace std内的templ ...

  8. STL中bitset的用法

    终于又来写博客了 == bitset存储的是二进数位,就和一个bool性数组差不多.用法上和数组的操作方式也差不多. 每位只占一个字节,大大优化了空间,可以通过数组形式访问. bitset定义 可以用 ...

  9. STL之list容器用法

    List 容器 list是C++标准模版库(STL,Standard Template Library)中的部分内容.实际上,list容器就是一个双向链表,可以高效地进行插入删除元素. 使用list容 ...

随机推荐

  1. 零基础JavaScript编码(一)

    任务目的 JavaScript初体验 初步明白JavaScript的简单基本语法,如变量.函数 初步了解JavaScript的事件是什么 初步了解JavaScript中的DOM是什么 任务描述 参考以 ...

  2. https信任库采坑记

    最近在客户现场遇到一个棘手的http问题,现象很直接,访问某https的时候报错: javax.net.ssl.SSLPeerUnverifiedException: peer not authent ...

  3. Asp.Net Core 中IdentityServer4 授权中心之应用实战

    一.前言 查阅了大多数相关资料,查阅到的IdentityServer4 的相关文章大多是比较简单并且多是翻译官网的文档编写的,我这里在 Asp.Net Core 中IdentityServer4 的应 ...

  4. vue项目用sha256、md5、base64加密密码

    无论你开发什么样的项目,你可能都会要开发登录.注册.修改密码.忘记密码这些功能,少数项目除外!!要实现这些功能,对于保护用户或者管理员账号密码,这是我们程序员肯定要做的事情.要是用户密码不加密,用明文 ...

  5. python自动化第一课 - python安装以及pycharm配置

    1.安装python 1.1打开python官网https://www.python.org/downloads/windows/进行下载Python 3.8.0 1.2下载完毕后进行安装,1勾选 A ...

  6. 05 Linux目录速查表

    /:根目录,一般根目录下只存放目录,在 linux 下有且只有一个根目录,所有的东西都是从这里开始 当在终端里输入 /home,其实是在告诉电脑,先从 /(根目录)开始,再进入到 home 目录 /b ...

  7. 编写程序实现根据考试成绩将成绩分为A,B,C,D四档。

    score = float(input("请输入你的成绩:"))if 90 <= score <= 100: print("你的成绩为A档")eli ...

  8. vue中v-if和v-show的区别

    v-if.v-show顾名思义就是用来判断视图层展示效果的.  v-if 指令用于条件性地渲染一块内容.这块内容只会在指令的表达式返回真值的时候被渲染. v-show 指的是单纯的切换元素的样式dis ...

  9. Oracle学习笔记--Oracle启动过程归纳整理

    Oracle 启动过程分为nomount状态mount状态open状态 每个状态下Oracle都会进行不同的操作:1.nomount状态 在$ORACLE_HOME/dbs目录下寻找参数文件 参数文件 ...

  10. go学习第五天、运算符

    算术运算符 下表列出了所有Go语言的算术运算符.假定 A 值为 10,B 值为 20 运算符 描述 实例 + 相加 A + B 输出结果 30 - 相减 A - B 输出结果 -10 * 相乘 A * ...