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. NC65主键含义

    最简单的办法,调用用友的类 import nc.jdbc.framework.generator.SequenceGenerator; IdGenerator idGenerator = new Se ...

  2. Kafka干货之「零拷贝」

    一.背景 周所周知,Kafka是一个非常成熟的消息产品,开源社区也已经经历了多年的不断迭代,特性列表更是能装下好几马车,比如:幂等消息.事务支持.多副本高可用.ACL.Auto Rebalance.H ...

  3. java后端工具类之从0到1生成数字证书(RSA)

    开放签电子签章系统-开源版这周(2023-12-15)就要上线发布了,为了让开源版能够更好的服务广大研发工程师,接下来会详细的说说开源版从代码层面的具体实现,以便大家在工作过程中更好使用开放签电子签章 ...

  4. springboot-jpa获取session

    springboot获取hibernate的session进行更精细的SQL操作,默认的jpa并不能满足一些复杂需求(可能是我把需求设计复杂了) 通过查看JpaRepository的底层实现,发现是通 ...

  5. MySQL 基础(三)事务与 MVCC

    事务 事务是一组原子性的 SQL 操作,或者被称为一个独立的工作单元,如果数据库引擎能够成功地对数据库应用该组的全部 SQL 语句,那么就会全部执行,否则全部不执行. 事务的特性 在关系数据库管理系统 ...

  6. 【Python】【OpenCV】OCR识别(二)——透视变换

    对于OCR技术在处理有角度有偏差的图像时是比较困难的,而水平的图像使用OCR识别准确度会高很多,因为文本通常是水平排列的,而OCR算法一般会假设文本是水平的. 针对上述情况,所以我们在处理有角度的图象 ...

  7. springboot的启动器

    前言 ~ 面试的时候,被问到springboot 官方提供的启动器常见的有哪些?(头大) 正文 ~ 启动器作用: 启动器是为了 适应 一个特定的场景的,里面定义了 这个场景下 需要用到的依赖. 启动器 ...

  8. 聊一聊如何整合Microsoft.Extensions.DependencyInjection和Castle.Core(三)

    前言 今天的第三篇,感觉没啥人看呀,难道没有兄弟跟我有同样的整合需求吗???手动 , 本文会简短一些,介绍下 CastleCore 作为代理库的一些缺点甚至是硬伤 异步支持 先上代码 /// < ...

  9. MySQL进阶篇:详解MySQL存储引擎选择

    MySQL进阶篇:第一章_一.五_MySQL存储引擎选择 在选择存储引擎时,应该根据应用系统的特点选择合适的存储引擎.对于复杂的应用系统,还可以根据实际情况选择多种存储引擎进行组合. InnoDB: ...

  10. 中秋国庆花式玩法,用低代码DIY假日大屏“Vlog”

    ​​本文分享自华为云社区 <[云享热点]中秋国庆花式玩法,用低代码DIY假日大屏"Vlog"(内附节日福利)>,作者:华为云社区精选. 中秋.国庆双节将至,你的八天小长 ...