深入解析 C++ 中的 ostringstream、istringstream 和 stringstream 用法
引言:
在 C++ 中,ostringstream、istringstream 和 stringstream 是三个非常有用的字符串流类,它们允许我们以流的方式处理字符串数据。本文将深入探讨这三个类的用法和特性,帮助读者更好地理解和应用字符串流操作。
1. ostringstream(输出字符串流)
ostringstream 是 C++ 中用于输出字符串的流类。它继承自 ostream,可以将各种数据类型输出到一个字符串中,方便地构造字符串。
使用方法:
#include <sstream>
#include <iostream>
int main() {
std::ostringstream oss;
int num = 42;
double pi = 3.14159;
// 向 ostringstream 中输出数据
oss << "The answer is: " << num << ", and the value of pi is: " << pi;
// 获取 ostringstream 的内容(字符串)
std::string result = oss.str();
// 输出结果
std::cout << result << std::endl;
return 0;
}
输出结果:
The answer is: 42, and the value of pi is: 3.14159
2. istringstream(输入字符串流)
istringstream 是 C++ 中用于输入字符串的流类。它继承自 istream,可以将一个字符串解析成各种数据类型,方便地从字符串中读取数据。
使用方法:
#include <sstream>
#include <iostream>
int main() {
std::string data = "John 25 3.14";
std::istringstream iss(data);
std::string name;
int age;
double pi;
// 从 istringstream 中读取数据
iss >> name >> age >> pi;
// 输出结果
std::cout << "Name: " << name << std::endl;
std::cout << "Age: " << age << std::endl;
std::cout << "Value of pi: " << pi << std::endl;
return 0;
}
输出结果:
Name: John
Age: 25
Value of pi: 3.14
3. stringstream(输入输出字符串流)
stringstream 是 C++ 中同时支持输入和输出的字符串流类。它继承自 iostream,可以将各种数据类型输出到一个字符串中,也可以从一个字符串中读取数据。
使用方法:
#include <sstream>
#include <iostream>
int main() {
std::stringstream ss;
int num = 42;
double pi = 3.14159;
// 向 stringstream 中输出数据
ss << "The answer is: " << num << ", and the value of pi is: " << pi;
// 获取 stringstream 的内容(字符串)
std::string result = ss.str();
// 输出结果
std::cout << result << std::endl;
// 清空 stringstream
ss.str("");
ss.clear();
// 从一个字符串中读取数据
std::string data = "John 25 3.14";
ss << data;
std::string name;
int age;
double value;
// 从 stringstream 中读取数据
ss >> name >> age >> value;
// 输出结果
std::cout << "Name: " << name << std::endl;
std::cout << "Age: " << age << std::endl;
std::cout << "Value: " << value << std::endl;
return 0;
}
输出结果:
The answer is: 42, and the value of pi is: 3.14159
Name: John
Age: 25
Value: 3.14
总结
ostringstream、istringstream 和 stringstream 是 C++ 中非常有用的字符串流类,它们分别用于输出、输入和同时输入输出字符串。通过使用这些类,我们可以更方便地处理字符串数据,以及实现数据类型和字符串之间的转换。在实际编程中,可以根据具体需求选择合适的字符串流类来简化代码的实现。
参考资料
- C++ Reference: std::ostringstream. https://en.cppreference.com/w/cpp/io/basic_ostringstream
- C++ Reference: std::istringstream. https://en.cppreference.com/w/cpp/io/basic_istringstream
- C++ Reference: std::stringstream. https://en.cppreference.com/w/cpp/io/basic_stringstream
- GeeksforGeeks: C++ stringstream, ostringstream and istringstream. https://www.geeksforgeeks.org/cpp-stringstream-istringstream-and-ostringstream/
深入解析 C++ 中的 ostringstream、istringstream 和 stringstream 用法的更多相关文章
- C++中stringstream ostringstream istringstream使用方式
C++引入了ostringstream.istringstream.stringstream这三个类,要使用他们创建对象就必须包括sstream.h头文件. istringstream类用于运行C++ ...
- ostringstream、istringstream、stringstream(转)
看一下C++风格的串流控制,C++引入了ostringstream.istringstream.stringstream这三个类,要使用他们创建对象就必须包含sstream.h头文件. istring ...
- 浅解析js中的对象
浅解析js中的对象 原文网址:http://www.cnblogs.com/foodoir/p/5971686.html,转载请注明出处. 前面的话: 说到对象,我首先想到的是每到过年过节见长辈的时候 ...
- 深入解析Javascript中this关键字的使用
深入解析Javascript中面向对象编程中的this关键字 在Javascript中this关键字代表函数运行时,自动生成的一个内部对象,只能在函数内部使用.比如: function TestFun ...
- js中eval详解,用Js的eval解析JSON中的注意点
先来说eval的用法,内容比较简单,熟悉的可以跳过eval函数接收一个参数s,如果s不是字符串,则直接返回s.否则执行s语句.如果s语句执行结果是一个值,则返回此值,否则返回undefined. 需要 ...
- 2dx解析cocosbuilder中使用layer时的缺陷
2dx解析cocosbuilder中使用layer时的缺陷 cocos2d-x 3.7 cocosbuilder中的layer通常会用到触摸属性: 但是在2dx解析布局文件的时候,却很多属性都没解析: ...
- asp自动解析网页中的图片地址,并将其保存到本地服务器
程序实现功能:自动将远程页面的文件中的图片下载到本地. 程序代码 <% '将本文保存为 save2local.asp '测试:save2local.asp?url=http://ent.sina ...
- XML解析——Java中XML的四种解析方式
XML是一种通用的数据交换格式,它的平台无关性.语言无关性.系统无关性.给数据集成与交互带来了极大的方便.XML在不同的语言环境中解析方式都是一样的,只不过实现的语法不同而已. XML的解析方式分为四 ...
- 转:二十一、详细解析Java中抽象类和接口的区别
转:二十一.详细解析Java中抽象类和接口的区别 http://blog.csdn.net/liujun13579/article/details/7737670 在Java语言中, abstract ...
- [转载]解析WINDOWS中的DLL文件---经典DLL解读
[转载]解析WINDOWS中的DLL文件---经典DLL解读 在Windows世界中,有无数块活动的大陆,它们都有一个共同的名字——动态链接库.现在就走进这些神奇的活动大陆,找出它们隐藏已久的秘密吧! ...
随机推荐
- 爆肝万字带你超级详细全面了解Linux命令大全
前言 作者主页:CSDN丨博客园 学习交流:在下周周ovoの社区 对这篇万字博客目录总结如下: 关机命令.重启命令,创建用户.删除用户.修改密码.切换用户.切换到超级用户.禁用/解锁用户账户.修改信息 ...
- LeetCode 周赛 350(2023/06/18)01 背包变型题
本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 和 [BaguTree Pro] 知识星球提问. 往期回顾:LeetCode 单周赛第 348 场 · 数位 DP ...
- 在线免费ChatGPT,官方api
作为一款强大的语言模型,ChatGPT在自然语言处理领域享有较高声誉.现在,您可以在我们的在线平台上免费体验ChatGPT的功能了! 经过不断地优化和改进,我们的在线聊天机器人已经能够针对各种话题展示 ...
- ElasticSearch的使用和介绍
1.概述 功能 Elasticsearch 是一个分布式的 RESTful 搜索和分析引擎,可用来集中存储您的数据,以便您对形形色色.规模不一的数据进行搜索.索引和分析. 例如: 在电商网站搜索商品 ...
- 龙芯电脑编译redis (loongarch)
1.获取源码 源码地址:https://redis.io/download/#redis-downloads 最新版本是7.2,这里用redis5测试,最后一个版本是5.0.14 wget https ...
- HCL实验:3.两台PC通过路由器交换机PING通
拓扑图 路由器配置网关 PC1 ping PC2, PC3
- Windows系统使用Nginx部署Vue
Nginx是什么? Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器 ,同时也提供了IMAP/POP3/SMTP服务.Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的R ...
- subprocess Python执行系统命令最优选模块
简介 subprocess 是 Python 中执行操作系统级别的命令的模块,所谓系级级别的命令就是如ls /etc/user ifconfig 等和操作系统有关的命令. subprocess 创建子 ...
- EasyExcel · 写excel
原文地址 通用数据生成 后面不会重复写 private List<DemoData> data() { List<DemoData> list = ListUtils.newA ...
- Semantic Kernel Java SDK,为Java应用程序提供AI功能集成
美国时间 2023 年 7 月 19 日,Semantic Kernel 团队在其官方博客[1]上宣布发布 Java 版Semantic Kernel. Samantic Kernel系列的源代码可在 ...