博客
关于我
c++中istringstream及ostringstream超详细说明
阅读量:382 次
发布时间:2019-03-05

本文共 3389 字,大约阅读时间需要 11 分钟。

以及
类在C++程序中扮演着重要的角色。这些类不仅提供了灵活的字符串缓冲区,还为开发者提供了方便的数据流操作接口。本文将从stringbuf开始,逐步介绍这些类的特点和使用方法。

1. stringbuf类介绍

stringbuf类的核心作用是实现一个基于std::string的缓冲区。它采用双端队列的方式来管理内存,能够根据需要动态地扩展或收缩缓冲空间。stringbuf的内置缓冲区使用std::string作为存储介质,通过构造时的读写模式来决定缓冲区的使用方式。

1.1 stringbuf的构造函数

stringbuf类提供了两个主要的构造函数:

  • 默认构造函数
  • explicit basic_stringbuf(ios_base::openmode __mode = ios_base::in | ios_base::out)     : __streambuf_type(), _M_mode(__mode), _M_stringbuf() {    _M_stringbuf_init(__mode);}
    1. 带有初始内容的构造函数
    2. explicit basic_stringbuf(const string_type& __str,     ios_base::openmode __mode = ios_base::in | ios_base::out)     : __streambuf_type(), _M_mode(), _M_stringbuf(__str.data(), __str.size()) {    _M_stringbuf_init(__mode);}

      使用示例

      #include 
      using namespace std;int main() { stringbuf* buf = new stringbuf(ios_base::in); // 可读缓冲区 string str("缓冲区内容"); stringbuf* bufStr = new stringbuf(str, ios_base::out); // 可写缓冲区 // 使用前需确保动态内存释放 if (buf != nullptr) { delete buf; } if (bufStr != nullptr) { delete bufStr; } return 0;}

      1.2 str函数

      str函数用于获取当前缓冲区中的字符串内容:

      string_type str() const;  // 获取当前缓冲区内容void str(const string_type& __s);  // 将字符串赋值给缓冲区

      使用示例

      #include 
      using namespace std;int main() { stringbuf* buf = new stringbuf(ios_base::in); string str("初始内容"); stringbuf* bufStr = new stringbuf(str, ios_base::out); cout << bufStr->str() << endl; // 输出写入缓冲区后的内容 buf->str(string("修改后的内容")); // 修改缓冲区内容 cout << buf->str() << endl; // 输出最新内容 // 释放动态内存 if (buf != nullptr) { delete buf; } if (bufStr != nullptr) { delete bufStr; } return 0;}

      2. istringstream类

      istringstream是basic_istringstream的一个char类型实例,默认以读取模式打开。它继承自basic_istringstream,提供了与stringbuf兼容的接口。istringstream的构造函数与stringbuf类似,但默认模式为ios_base::in

      2.1 rdbuf函数

      rdbuf函数用于获取当前缓冲区的stringbuf指针:

      stringbuf_type* rdbuf() const;

      使用示例

      #include 
      using namespace std;int main() { istringstream istr("输入流内容"); string str = istr.str(); // 获取字符串内容 // 检查缓冲区可用长度 cout << "缓冲区长度: " << istr.rdbuf()->in_avail() << endl; return 0;}

      2.2 swap函数

      swap函数用于交换两个istringstream对象的内容:

      void swap(basic_istringstream& __rhs);

      使用示例

      #include 
      using namespace std;int main() { string s1 = "字符串1"; string s2 = "字符串2"; istringstream istr1(s1); istringstream istr2(s2); // 交换内容 istr1.swap(istr2); cout << "交换后 istr1: " << istr1.str() << endl; cout << "交换后 istr2: " << istr2.str() << endl; return 0;}

      3. ostringstream类和stringstream类

      ostringstream用于将数据写入字符串,默认模式为ios_base::out。它类似于basic_ostringstream,提供了与istringstream一致的接口。

      3.1 stringstream类

      stringstream类继承自iostream,支持同时读取和写入数据。它的构造函数默认模式为ios_base::out | ios_base::in,允许双向操作。

      构造函数示例

      explicit basic_stringstream(ios_base::openmode __m = ios_base::out | ios_base::in)    : __iostream_type(), _M_stringbuf(__m) {    this->init(&_M_stringbuf);}

      使用示例

      #include 
      using namespace std;int main() { stringbuf* buf = new stringbuf(ios_base::in); ostringstream oss; stringbuf* ossBuf = oss.rdbuf(); // 写入数据 oss << "输出到字符串: "; oss << static_cast
      (buf->str()); // 读取数据 string str = oss.str(); cout << "读取结果: " << str << endl; // 释放资源 if (buf != nullptr) { delete buf; } if (ossBuf != nullptr) { delete ossBuf; } return 0;}

      通过以上内容,可以看出

      类在C++程序中的重要性。理解这些类的特点和使用方法,是掌握C++ IO库的关键所在。

    转载地址:http://jccwz.baihongyu.com/

    你可能感兴趣的文章
    NIFI同步MySql数据源数据_到原始库hbase_同时对数据进行实时分析处理_同步到清洗库_实际操作06---大数据之Nifi工作笔记0046
    查看>>
    Nifi同步过程中报错create_time字段找不到_实际目标表和源表中没有这个字段---大数据之Nifi工作笔记0066
    查看>>
    【Flink】Flink 1.9 版本 web UI 突然没有日志
    查看>>
    NIFI大数据进阶_FlowFile拓扑_对FlowFile内容和属性的修改删除添加_介绍和描述_以及实际操作---大数据之Nifi工作笔记0023
    查看>>
    NIFI大数据进阶_FlowFile生成器_GenerateFlowFile处理器_ReplaceText处理器_处理器介绍_处理过程说明---大数据之Nifi工作笔记0019
    查看>>
    NIFI大数据进阶_FlowFile生成器_GenerateFlowFile处理器_ReplaceText处理器_实际操作---大数据之Nifi工作笔记0020
    查看>>
    NIFI大数据进阶_Json内容转换为Hive支持的文本格式_实际操作_02---大数据之Nifi工作笔记0032
    查看>>
    NIFI大数据进阶_Json内容转换为Hive支持的文本格式_操作方法说明_01_EvaluteJsonPath处理器---大数据之Nifi工作笔记0031
    查看>>
    NIFI大数据进阶_Kafka使用相关说明_实际操作Kafka消费者处理器_来消费kafka数据---大数据之Nifi工作笔记0037
    查看>>
    NIFI大数据进阶_Kafka使用相关说明_实际操作Kafka生产者---大数据之Nifi工作笔记0036
    查看>>
    NIFI大数据进阶_NIFI的模板和组的使用-介绍和实际操作_创建组_嵌套组_模板创建下载_导入---大数据之Nifi工作笔记0022
    查看>>
    NIFI大数据进阶_NIFI监控功能实际操作_Summary查看系统和处理器运行情况_viewDataProvenance查看_---大数据之Nifi工作笔记0026
    查看>>
    NIFI大数据进阶_NIFI监控的强大功能介绍_处理器面板_进程组面板_summary监控_data_provenance事件源---大数据之Nifi工作笔记0025
    查看>>
    NIFI大数据进阶_NIFI集群知识点_认识NIFI集群以及集群的组成部分---大数据之Nifi工作笔记0014
    查看>>
    NIFI大数据进阶_NIFI集群知识点_集群的断开_重连_退役_卸载_总结---大数据之Nifi工作笔记0018
    查看>>
    NIFI大数据进阶_使用NIFI表达式语言_来获取自定义属性中的数据_NIFI表达式使用体验---大数据之Nifi工作笔记0024
    查看>>
    NIFI大数据进阶_内嵌ZK模式集群1_搭建过程说明---大数据之Nifi工作笔记0015
    查看>>
    NIFI大数据进阶_内嵌ZK模式集群2_实际操作搭建NIFI内嵌模式集群---大数据之Nifi工作笔记0016
    查看>>
    NIFI大数据进阶_外部ZK模式集群1_实际操作搭建NIFI外部ZK模式集群---大数据之Nifi工作笔记0017
    查看>>
    NIFI大数据进阶_实时同步MySql的数据到Hive中去_可增量同步_实时监控MySql数据库变化_实际操作_03---大数据之Nifi工作笔记0035
    查看>>