当前位置: 首页 > news >正文

C++ - 标准库之 <sstream> ostringstream(ostringstream 概述、基本使用、清空内容、进阶使用)

一、std::ostringstream 概述

  1. std::ostringstream 是 C++ 标准库中的一个类,用于将数据格式化为字符串

  2. std::ostringstream 结合了流操作和字符串操作的功能,可以像使用 cout 一样向字符串写入数据


二、std::ostringstream 基本使用

  1. 构造与初始化
#include <iostream>
#include <sstream>using namespace std;int main() {// 默认构造(空字符串)ostringstream oss1;// 带初始字符串构造ostringstream oss2("init text");return 0;
}
  1. 写入数据与获取字符串
#include <iostream>
#include <sstream>using namespace std;int main() {ostringstream oss;oss << "Hello" << " " << 42 << " " << 3.14;string result = oss.str();cout << result << endl;// 清空内容oss.str("");return 0;
}
# 输出结果Hello 42 3.14

三、std::ostringstream 清空内容

1、如果不清空内容
  • 如果不清空内容,std::ostringstream 会保留之前写入的所有内容,后续写入会追加到已有内容之后
#include <iostream>
#include <sstream>using namespace std;int main() {ostringstream oss;oss << "Hello" << " World";string result1 = oss.str();cout << result1 << endl;string result2 = oss.str();cout << result2 << endl;return 0;
}
# 输出结果Hello World
Hello World
2、清空内容的方式
  1. 赋空字符串
oss.str("");
  1. 构造空字符串
oss.str(string());

四、std::ostringstream 进阶使用

1、格式化控制
#include <iostream>
#include <sstream>using namespace std;int main() {ostringstream oss;oss << hex << 255;string result = oss.str();oss.str("");cout << result << endl;return 0;
}
# 输出结果ff
#include <iostream>
#include <sstream>
#include <iomanip>using namespace std;int main() {ostringstream oss;oss << setw(10) << "text";string result = oss.str();oss.str("");cout << result << endl;return 0;
}
# 输出结果text
#include <iostream>
#include <sstream>
#include <iomanip>using namespace std;int main() {ostringstream oss;oss << setfill('*') << setw(8) << 42;string result = oss.str();oss.str("");cout << result << endl;return 0;
}
# 输出结果******42
#include <iostream>
#include <sstream>
#include <iomanip>using namespace std;int main() {ostringstream oss;oss << fixed << setprecision(2) << 3.14159;string result = oss.str();oss.str("");cout << result << endl;return 0;
}
# 输出结果3.14
2、追加内容
  1. str 方法用于完全替换流中的内容,且流的位置指针会被重置到开头,如果直接追加内容,追加内容会覆盖掉替换内容
#include <iostream>
#include <sstream>using namespace std;int main() {ostringstream oss;// 追加内容oss.str("New content");// 替换内容oss << " appended";string result = oss.str();oss.str("");cout << result << endl;return 0;
}
# 输出结果appendednt
  1. 使用 seekp 方法定位到行末,再追加内容
#include <iostream>
#include <sstream>using namespace std;int main() {ostringstream oss;// 追加内容oss.str("New content");// 定位到行末oss.seekp(0, ios::end);// 替换内容oss << " appended";string result = oss.str();oss.str("");cout << result << endl;return 0;
}
# 输出结果New content appended
3、流状态
  1. 操作成功
#include <iostream>
#include <sstream>using namespace std;int main() {ostringstream oss;// 成功写入操作oss << "Hello";if (oss.good()) {cout << "操作成功" << endl;}if (oss.fail()) {cout << "操作失败" << endl;}cout << "内容:" << oss.str() << endl;return 0;
}
# 输出结果操作成功
内容:Hello
  1. 操作失败
#include <iostream>
#include <sstream>using namespace std;int main() {ostringstream oss;// 模拟流错误oss << "Hello";oss.setstate(ios::failbit);oss << "Hello World";if (oss.good()) {cout << "操作成功" << endl;}if (oss.fail()) {cout << "操作失败" << endl;}cout << "内容:" << oss.str() << endl;return 0;
}
# 输出结果操作失败
内容:Hello
http://www.lqws.cn/news/76051.html

相关文章:

  • 房屋租赁系统 Java+Vue.js+SpringBoot,包括房屋信息、看房申请、租赁合同、房屋报修、收租信息、维修数据、租客管理、公告管理模块
  • 系统调用与程序接口的关系
  • [leetcode] 二分算法
  • 线程间和进程间是如何进行通信
  • day17 leetcode-hot100-34(链表13)
  • Oracle的Hint
  • 【笔记】Windows系统部署suna基于 MSYS2的Poetry 虚拟环境backedn后端包编译失败处理
  • (九)学生写作画像可视化
  • 【PhysUnits】15.9 引入P1后的右移运算(shr.rs)
  • Vue-4-前端框架Vue基础入门之Vue的常用操作
  • 二叉树的构建与逆构建/二叉查找树与替罪羊树
  • 安全态势感知中的告警误报思考
  • SDU棋界精灵——实现硬件程序ESP32的FreeRTOS任务
  • day44 python 训练CNN网络并使用Grad-CAM可视化
  • NTP库详解
  • React Hooks 与异步数据管理
  • react实现markdown文件预览
  • A. We Need the Zero
  • NX869NX874美光固态颗粒NX877NX883
  • Vortex GPGPU的github流程跑通与功能模块波形探索(四)
  • FFmpeg移植教程(linux平台)
  • RSCUcaller
  • 12.1 GUI 事件处理
  • 《 C++ 点滴漫谈: 四十 》文本的艺术:C++ 正则表达式的高效应用之道
  • 前端高频面试题2:JavaScript/TypeScript
  • 迈向分布式智能:解析MCP到A2A的通信范式迁移
  • 第十二节:第四部分:集合框架:List系列集合:LinkedList集合的底层原理、特有方法、栈、队列
  • 【华为云Astro Zero】组装设备管理页面开发(图形拖拽 + 脚本绑定)
  • Ubuntu上进行VS Code的配置
  • STM32G4 电机外设篇(四)DAC输出电流波形 + CAN通讯