std::istringstream的用法
1.概要
std::istringstream 是 C++ 标准库中的一个类,它用于从字符串中提取数据,并将数据转换为不同的数据类型。它通常用于从字符串中解析数据,例如整数、浮点数等。以下是关于 std::istringstream 的详细用法:
创建 std::istringstream 对象: 首先,你需要创建一个 std::istringstream 对象,将要解析的字符串传递给它。例如:std::istringstream iss("123 45.6");,这将创建一个用于解析字符串 "123 45.6" 的 iss 对象。
使用输入操作符 >> 提取数据: 你可以使用 >> 操作符从 std::istringstream 对象中提取数据,并将其存储在变量中。例如:int num; iss >> num; 将尝试从 iss 中提取一个整数,并将其存储在 num 中。如果提取成功,num 将包含提取的整数值;如果提取失败,num 不会被改变。
检查提取是否成功: 你可以检查提取操作的成功与否,通常使用条件语句。例如:if (iss >> num),这将返回 true 如果提取成功,否则返回 false。这允许你根据提取的结果来执行不同的操作。
多次提取: 你可以多次使用 >> 操作符来从同一个 std::istringstream 对象中提取不同类型的数据。例如,你可以提取整数、浮点数、字符串等。
清除 std::istringstream: 你可以使用 iss.clear() 来清除 std::istringstream 的错误状态,以便重新使用它。这通常在你想要从同一个 std::istringstream 对象中提取不同类型的数据时非常有用。
2.代码:
下面是一个示例,展示了 std::istringstream 的使用:
#include <iostream>
#include <sstream>
#include <string>
int main() {
std::string data = "123 45.6";
std::istringstream iss(data);
int num;
double dbl;
iss >> num; // 提取整数
iss >> dbl; // 提取浮点数
if (iss) {
std::cout << "提取的整数: " << num << std::endl;
std::cout << "提取的浮点数: " << dbl << std::endl;
} else {
std::cout << "提取失败" << std::endl;
}
return 0;
}
结果展示

3.函数
参考链接:https://cloud.tencent.com/developer/article/1818951
3.1 rdbuf函数
rdbuf函数原型如下:
//返回一个指向stringbuf对象的指针
__stringbuf_type*
rdbuf() const
{ return const_cast<__stringbuf_type*>(&_M_stringbuf); }
rdbuf使用案例如下:
#include <sstream>
#include <iostream>
using namespace std;
int main()
{
istringstream istr("istringstream", ios_base::in);
cout << "string is " << istr.str() << endl;
cout << "string's len is " << istr.rdbuf()->in_avail() << endl;
return 0;
}
这里也顺便展示了一下str函数的用法(获取当前对象当前所包含的字符串)
而in_avail是streambuf类里面的另一个函数,用于返回当前缓冲区长度。
编译后执行结果如下:
[root@mylinux ~]# ./a.out
string is istringstream
string's len is 13
[root@mylinux ~]#
2.2 swap函数
swap函数原型如下:
//用于交换两个istringstream内容
void swap(basic_istringstream& __rhs);
用法如下:
#include <sstream>
#include <iostream>
using namespace std;
int main()
{
istringstream istr1("lilei");
istringstream istr2("hanmeimei");
istr1.swap(istr2);
cout << "istr1 is " << istr1.str() << endl;
cout << "istr2 is " << istr2.str() << endl;
return 0;
}
编译后输出结果如下:
[root@mylinux ~]# ./a.out
istr1 is hanmeimei
istr2 is lilei
[root@mylinux ~]#
可以看到istr1和istr2两个对象的内容是完全交换了。
std::istringstream的用法的更多相关文章
- C++ std::map::erase用法及其陷阱
1.引入: STL的map中有一个erase方法用来从一个map中删除制定的节点 eg: map<string,string> mapTest; typedef map<string ...
- C++ std::pair的用法
1 pair的应用 pair是将2个数据组合成一个数据,当需要这样的需求时就可以使用pair,如stl中的map就是将key和value放在一起来保存.另一个应用是,当一个函数需要返回2个数据的时候, ...
- c++ istringstream的用法
一.测试代码 istringstream 是将字符串变成字符串迭代器一样,将字符串流在依次拿出,比较好的是,它不会将空格作为流.这样就实现了字符串的空格切割. #include<iostream ...
- std::shared_ptr 和 std::weak_ptr的用法以及引用计数的循环引用问题
在std::shared_ptr被引入之前,C++标准库中实现的用于管理资源的智能指针只有std::auto_ptr一个而已.std::auto_ptr的作用非常有限,因为它存在被管理资源的所有权转移 ...
- C++中的 istringstream 的用法
C++引入了ostringstream.istringstream.stringstream这三个类,要使用他们创建对象就必须包含<sstream>这个头文件. istringstream ...
- C++11新特性之二——std::bind std::function 高级用法
/* * File: main.cpp * Author: Vicky.H * Email: eclipser@163.com */ #include <iostream> #includ ...
- std::unique_ptr的用法
std::ofstream("demo.txt") << 'x'; // 准备要读的文件 { std::unique_ptr<std::FILE, decltyp ...
- C++ std::deque 基本用法
#include <iostream> #include <string> #include <deque> // https://zh.cppreference. ...
- C++ std::stack 基本用法
#include <iostream> #include <string> #include <stack> // https://zh.cppreference. ...
- C++ std::forward_list 基本用法
#include <iostream> #include <string> #include <forward_list> using namespace std; ...
随机推荐
- 【C++】【图像处理】均值滤波 and 高斯滤波 and 中值滤波 (低通滤波器)and Sobel算子边缘提取算法解析(以.raw格式的图像为基础进行图像处理、gray levels:256)
1 void meanFilter(BYTE* image, int width, int height, BYTE* outImg) 2 { 3 //均值滤波 4 int smth[9]; 5 in ...
- 从零玩转Java和word模板-从零玩转java和word模板
title: 从零玩转Java和word模板 date: 2021-12-22 18:38:14.086 updated: 2021-12-22 18:38:14.086 url: https://w ...
- Windows Server 2016 Standard RemoteApp应用发布配置举例
RemoteApp 应用发布介绍 RemoteApp 是微软在Windows Server 2008 之后,在其系统中集成的一项服务功能,用户可以通过远程桌面访问远端服务器的桌面与程序,客户端本机在无 ...
- zookeeper源码(05)数据存储
本文详细分析一下zookeeper的数据存储. ZKDatabase 维护zookeeper服务器内存数据库,包括session.dataTree和committedlog数据,从磁盘读取日志和快照后 ...
- 我的第一个JavaWeb程序!!!
- .NET开源免费功能最全的商城项目
前言 今天给大家推荐一个功能丰富.免费.灵活且可定制的开源电子商务解决方案:nopCommerce.大家假如有商城需求可以直接使用该项目进行二次开发,省时省力. 项目介绍 nopCommerce在.N ...
- 神经网络入门篇:深度学习和大脑的关联性(What does this have to do with the brain?)
深度学习和大脑的关联性 开始讲故事(手动狗头) 深度学习和大脑有什么关联性吗? 关联不大. 那么为什么会说深度学习和大脑相关呢? 当你在实现一个神经网络的时候,那些公式是你在做的东西,你会做前向传播. ...
- EDS从小白到专家丨打造你的专属“数据物流”系统
"数据快递"如何支撑便捷就医?本期让我们来了解如何使用EDS打造专属的"数据物流"系统...... 本文分享自华为云社区<[EDS从小白到专家]第2期-E ...
- 实战案例丨GaussDB for DWS如何识别坏味道的SQL
摘要:SQL中的坏味道,你知道吗? SQL语言是关系型数据库(RDB)的标准语言,其作用是将使用者的意图翻译成数据库能够理解的语言来执行.人类之间进行交流时,同样的意思用不同的措辞会产生不同的效果. ...
- 4种Springboot RestTemplate 服务里发送HTTP请求用法
摘要: RestTemplate与REST资源交互的方法涵盖了HTTP请求方法,包括get, post, put, delete. 本文分享自华为云社区<Springboot RestTempl ...