1.概要

std::istringstream 是 C++ 标准库中的一个类,它用于从字符串中提取数据,并将数据转换为不同的数据类型。它通常用于从字符串中解析数据,例如整数、浮点数等。以下是关于 std::istringstream 的详细用法:

  1. 创建 std::istringstream 对象: 首先,你需要创建一个 std::istringstream 对象,将要解析的字符串传递给它。例如:std::istringstream iss("123 45.6");,这将创建一个用于解析字符串 "123 45.6" 的 iss 对象。

  2. 使用输入操作符 >> 提取数据: 你可以使用 >> 操作符从 std::istringstream 对象中提取数据,并将其存储在变量中。例如:int num; iss >> num; 将尝试从 iss 中提取一个整数,并将其存储在 num 中。如果提取成功,num 将包含提取的整数值;如果提取失败,num 不会被改变。

  3. 检查提取是否成功: 你可以检查提取操作的成功与否,通常使用条件语句。例如:if (iss >> num),这将返回 true 如果提取成功,否则返回 false。这允许你根据提取的结果来执行不同的操作。

  4. 多次提取: 你可以多次使用 >> 操作符来从同一个 std::istringstream 对象中提取不同类型的数据。例如,你可以提取整数、浮点数、字符串等。

  5. 清除 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的用法的更多相关文章

  1. C++ std::map::erase用法及其陷阱

    1.引入: STL的map中有一个erase方法用来从一个map中删除制定的节点 eg: map<string,string> mapTest; typedef map<string ...

  2. C++ std::pair的用法

    1 pair的应用 pair是将2个数据组合成一个数据,当需要这样的需求时就可以使用pair,如stl中的map就是将key和value放在一起来保存.另一个应用是,当一个函数需要返回2个数据的时候, ...

  3. c++ istringstream的用法

    一.测试代码 istringstream 是将字符串变成字符串迭代器一样,将字符串流在依次拿出,比较好的是,它不会将空格作为流.这样就实现了字符串的空格切割. #include<iostream ...

  4. std::shared_ptr 和 std::weak_ptr的用法以及引用计数的循环引用问题

    在std::shared_ptr被引入之前,C++标准库中实现的用于管理资源的智能指针只有std::auto_ptr一个而已.std::auto_ptr的作用非常有限,因为它存在被管理资源的所有权转移 ...

  5. C++中的 istringstream 的用法

    C++引入了ostringstream.istringstream.stringstream这三个类,要使用他们创建对象就必须包含<sstream>这个头文件. istringstream ...

  6. C++11新特性之二——std::bind std::function 高级用法

    /* * File: main.cpp * Author: Vicky.H * Email: eclipser@163.com */ #include <iostream> #includ ...

  7. std::unique_ptr的用法

    std::ofstream("demo.txt") << 'x'; // 准备要读的文件 { std::unique_ptr<std::FILE, decltyp ...

  8. C++ std::deque 基本用法

    #include <iostream> #include <string> #include <deque> // https://zh.cppreference. ...

  9. C++ std::stack 基本用法

    #include <iostream> #include <string> #include <stack> // https://zh.cppreference. ...

  10. C++ std::forward_list 基本用法

    #include <iostream> #include <string> #include <forward_list> using namespace std; ...

随机推荐

  1. Salesforce LWC学习(四十七) 标准页面更新以后自定义页面如何捕捉?

    本篇参考: https://developer.salesforce.com/docs/atlas.en-us.platform_events.meta/platform_events/platfor ...

  2. linux中iptables防火墙相关命令

    https://www.cnblogs.com/seven1979/p/4173927.html https://blog.csdn.net/shenjianxz/article/details/62 ...

  3. STM32CubeMX教程6 TIM 通用定时器 - 生成PWM波

    1.准备材料 开发板(STM32F407G-DISC1) ST-LINK/V2驱动 STM32CubeMX软件(Version 6.10.0) keil µVision5 IDE(MDK-Arm) 逻 ...

  4. Harbor私有镜像仓库搭建

    为什么选择Harbor 你可能会问既然我们已经有了 Docker 镜像仓库为什么还需要 Harbor 呢?嗯,Harbor 是 Docker 镜像仓库的企业级扩展,用途更广泛.这些新的企业级功能包括: ...

  5. GeoServer发布地图服务(WMS、WFS)

    目录 1. 概述 2. 矢量数据源 3. 栅格数据源 1. 概述 我们知道将GIS数据大致分成矢量数据和栅格数据(地形和三维模型都是兼具矢量和栅格数据的特性).但是如果用来Web环境中,那么使用图片这 ...

  6. JavaFx之整合JFoenix(十四)

    JavaFx之整合JFoenix JFoenix是JavaFx流行的UI框架之一 github:https://github.com/sshahine/JFoenix 整合Maven <!--h ...

  7. rust angular 自签名证书 wss

    项目中采用 wss 来建立的前后端连接, 但是并没有用到认证的证书, 所以自己用 openssl 生成了私钥, 自签名证书来使用: 这里就不再赘述 Wss 连接过程, 直接上手操作: 1. 生成私钥, ...

  8. 在xml中比较运算符

    SQL 中,可以使用比较运算符来比较两个值,如使用小于运算符 < 比较两个值大小.但是,在 SQL 查询中,有时候需要将小于运算符 < 用于 XML 或 HTML 语法中,这会导致语法冲突 ...

  9. 聊聊LiteOS中生成的Bin、HEX、ELF三种文件格式

    摘要:我们在使用编译器在编译工程后会要求生成可执行文件,将这些文件烧录到MCU进行运行,达到我们测试和使用程序的目的,再使用工具链进行编译的时候往往生成.bin..hex ..elf ..alf等文件 ...

  10. 云小课|VMware备份上云学习专列来了,快加入吧~

    阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要:华为云云备份CBR ...