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; ...
随机推荐
- 从零玩转设计模式之抽象工厂设计模式-chouxiangshejimoshi
title: 从零玩转设计模式之抽象工厂设计模式 date: 2022-12-08 16:05:03.28 updated: 2022-12-11 23:03:16.842 url: https:// ...
- buuctf 加固题 babypython WriteUp
原题wp参考链接:https://www.cnblogs.com/karsa/p/13529769.html 这是CISCN2021 总决赛的题,解题思路是软链接zip 读取文件,然后伪造admin的 ...
- k8s环境设置-pod下载及重启策略
k8s环境设置 在我们开始使用k8s之前,我们可以先做一些环境配置,使k8s更加的方便使用 第一个要做的就是kubectl命令的补全 在使用kubectl的时候你会发现参数你是Tab不出来的,这时候我 ...
- 高版本jdk的访问私有成员属性的正确姿势
在jdk17+已经不能直接通过 setAccessible 来访问私有属性了 Field name = access.getClass().getDeclaredField("name&qu ...
- CSS3学习笔记-选择器
在CSS中,选择器是一种指定一个或多个元素的方法.可以根据元素的类型.类.ID.属性等特征来选择元素.CSS3引入了很多新的选择 器,让我们可以更加灵活和精准地选择元素. 下面介绍一些常用的CSS3选 ...
- P1990-覆盖墙壁
分情况: \[\left\{ \begin{aligned} & 条形 \left\{ \begin{aligned} 横着\\ 竖着\\ \end{aligned}\right. \\ &a ...
- Python图像处理丨图像缩放、旋转、翻转与图像平移
摘要:本篇文章主要讲解Python调用OpenCV实现图像位移操作.旋转和翻转效果,包括四部分知识:图像缩放.图像旋转.图像翻转.图像平移. 本文分享自华为云社区<[Python图像处理] 六. ...
- 拥抱时序数据库,构筑IoT时代下智慧康养数据存储底座
摘要:在HDZ城市行广州站中,来自华为云华为云数据库创新Lab向宇从时序数据库的技术角度,解读一下华为云时序数据库GaussDB(for Influx)如何应用在智慧健康养老行业. 本文分享自华为云社 ...
- 技术+案例详解无监督学习Autoencoder
摘要:本篇文章将分享无监督学习Autoencoder的原理知识,然后用MNIST手写数字案例进行对比实验及聚类分析. 本文分享自华为云社区<[Python人工智能] 十五.无监督学习Autoen ...
- 火出边际的Serverless,你居然还不了解?
摘要:图灵奖获得者David A. Patterson和Spark共同创始人Ion Stoica,在19年伯克利的会议上发布Serverless将是下一代默认的计算范式. 本文分享自华为云社区< ...