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++字符串流基类)派生而来。
C++ - sstream标准库(串流控制)_第1张图片
由于sstream使用string对象代替字符数组,避免缓冲区溢出的危险;其次,因为传入参数和目标对象的类型会被自动推导出来,所以不存在错误的格式化符的问题。相比c库的数据类型转换,sstream更加安全、自动和直接。

使用样例:

#include 
#include 
#include 

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标准库详细介绍

你可能感兴趣的:(C/C++,c++,开发语言,算法)