C++ - sstream标准库(串流控制)

C++引入了ostringstream、istringstream、stringstream这三个类,要使用他们创建对象就必须包含sstream头文件。

  1. istringstream类用于执行串流的输入操作。
  2. ostringstream类用于执行串流的输出操作。
  3. strstream类同时可以支持串流的输入输出操作。

istringstream类是从istream(输入流类)和stringstreambase(c++字符串流基类)派生而来,ostringstream是从ostream(输出流类)和stringstreambase(c++字符串流基类)派生而来,stringstream则是从iostream(输入输出流类)和和stringstreambase(c++字符串流基类)派生而来。
在这里插入图片描述
由于sstream使用string对象代替字符数组,避免缓冲区溢出的危险;其次,因为传入参数和目标对象的类型会被自动推导出来,所以不存在错误的格式化符的问题。相比c库的数据类型转换,sstream更加安全、自动和直接。

使用样例:

#include <sstream>
#include <string>
#include <iostream>

int main()
{
    std::stringstream ss;
    std::string str1, str2;
    int iv = 10;
    // 将int类型的值放入输入流中。
    ss << iv << " is a test number.";
    // 从sstream中抽取前面插入的int类型的值,赋给string类型。
    // 以空格为分隔符。
    ss >> str1 >> str2;
    std::cout << "str1: " << str1 << std::endl;
    std::cout << "str2: " << str2 << std::endl;
    // 将sringstream类型转为string类型,以实现字符串拼接方法。
    std::cout << "ss.str(): " << ss.str() << std::endl;
    
    // 清空sstream的方法。
    // 在进行多次类型转换前,必须先运行clear()
    ss.str("");

    ss.clear();
    bool bl = true;
    int it = 0;
    ss << bl;
    ss >> it;
    std::cout << "(bool->int)it: " << it << std::endl;

    ss.clear();
    std::string str3 = "10";
    ss << str3;
    ss >> it;
    std::cout << "(string->int)it: " << it << std::endl;
}

输出结果:

str1: 10
str2: is
ss.str(): 10 is a test number.
(bool->int)it: 1
(string->int)it: 10

参考:

  1. c++ sstream
  2. C++的sstream标准库详细介绍
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值