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

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.xdnf.cn/news/10607.html

相关文章:

  • torch.randn vs torch.rand
  • 《深度探索C++对象模型》阅读笔记(完整版)
  • DAY 41 超大力王爱学Python
  • 回文字符串
  • window 显示驱动开发-支持多个处理器
  • unidbg patch 初探 微博deviceId 案例
  • STL解析——list的使用
  • 如何增加 cPanel中的 PHP 最大上传大小?
  • CSP使用严格设置
  • 【PhysUnits】15.9 引入P1后的右移运算(shr.rs)
  • C++ 简介
  • 基于 STM32 的医疗垃圾运输小车智能控制系统设计与实现
  • 房屋租赁系统 Java+Vue.js+SpringBoot,包括房屋信息、看房申请、租赁合同、房屋报修、收租信息、维修数据、租客管理、公告管理模块
  • 思维链提示:激发大语言模型推理能力的突破性方法
  • 论文略读:Auto-Regressive Moving Diffusion Models for Time Series Forecasting
  • 资源预加载+懒加载组合拳:从I/O拖慢到首帧渲染的全面优化方案
  • IPtables部署和使用
  • SCAU8640--希尔排序
  • 产品设计法则:用「人性引擎」驱动7层产品进化
  • OVD开放词汇检测中COCO数据集的属性
  • 数论——约数和倍数
  • 平滑技术(数据处理,持续更新...)
  • 提升嵌入式软件调试效率的核心方
  • 什么是煤矿智能掘进
  • 第七章.正则表达式
  • 【03】完整开发腾讯云播放器SDK的UniApp官方UTS插件——优雅草上架插件市场-卓伊凡
  • 腾讯位置商业授权沿途搜索服务开发指南
  • c++ delete实现动作
  • Netty学习example示例
  • RAG的ETL Pipeline源码解读