stringstream的详解!

2024-03-19 19:04
文章标签 详解 stringstream

本文主要是介绍stringstream的详解!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文主要介绍stringstream类对象的功能,希望读完本篇文章能使读者们会使用此类!

对于stringstream,在c++官网有着以下定义!

下面我就简单介绍一下我所知道的此类的一些功能!也是因为一道力扣题让我了解到了这个类!

一、使用方式 

要想使用此类,需要包含头文件<sstream>!

二、几种常见的功能! 

1.将整形转化为字符串类型!

int main()
{//1.将整形转化为字符串类型!int a = 8745442;string c;stringstream s;s << a;s >> c;cout<<c<<endl;s.str("");//注意转化过一次之后需要将s进行clear,要不不能进行下一次转化!//并且每次转化之后需要将stringstream中进行str("")清空,否则会影响下一次结果1s.clear();double d = 12.14;s << d;c = s.str();cout << c << endl;return 0;

从这个例子中可以看出stringstream其即是一个输入流/也是输出流,上面C++标准中也写有,因为当我们创建一个stringstream对象时,其既能像cin一样输出数据,也能像cout一样输出数据!在上面例子中我们定义了一个整形变量a和一个字符串类型c,我们经过s的转化也顺利的将数字类型转化为了字符串类型,下面通过监视窗口可以看出!

顺利的将数字转化为了整形!

但是当我们下一次再次定义一个double类型时,如果我们不把之前的str进行清空,那么结果还会加上之前的那串数字,看下图!

 这次我们没有将s中的内容进行置空,所以再次添加double类型d的时候,会将上次的结果也加上去。这时就引进了stringstream的str()函数了,他的功能是将stringstream对象赋值为括号里面的内容!(就是拷贝构造函数!)看库中对str()函数的例子解释!

str()函数

clear()函数

clear()函数的功能就是清空stringstream中的内容,如果不进行清空的话,那就和str()函数拷贝构造的一样,导致下次的结果出错!


2.字符串拼接的功能!

stringstream类对象也有字符串拼接的功能!看下图:

	//字符串拼接!stringstream ret;ret << "first " << ",second" << endl;//获取当前流中合并后的字符串cout<<ret.str();//当我们不进行对流中的数据进行清空时,还会保留上一次的结果!ret.str("");  //进行清空!ret << "hahaha";cout << ret.str();return 0;

 当我们将str()函数进行注释掉之后看一下结果!

再来观察一下没有被注释输出的结果!

很显然,我们能发现,如果不对上一次结果进行str()函数处理,那么下一次的结果就会将上一次的结果也保留下来,如果不想要上一次的结果,只需要加上str()函数即可!


下面再来看一下重头戏:分割字符串的功能!

3.分割字符串

在了解stringstream能分割字符串之前,我们需要对一个函数进行了解!

getline()

只有将getline函数理解了,才能理解stringstream能够分割字符串的原因!下面我们来看一下库中对getline函数的介绍!

对于库中的定义,我来简单介绍一下,is类型是一种输入流,而str是一个存储输入流中元素的字符串!对于1中,我们可以自己定义结束字符,但是对于2来言,其默认‘\n’是结束字符!

 既然了解到了getline的使用规则,知道其第一个参数必须是输入流!那么我们stringstream类也恰好也是一种输入流!(上文讲过!)那么我们就可以利用getline和streamstring二者相结合,来实现特定字符为结束标志来进行分割字符串了!

 下面看一段代码来看一下是如何使用的!

	string str = "1_2_6_4_8_9 ";stringstream s1(str);string tem;while (std::getline(s1, tem, '_')){cout << tem;}return 0;

输出结果如下:

根据结果可以看出,我们成功的将字符串进行了分割!

三、总结:

1.stringstream实际是在其底层维护了一个string类型的对象用来保存结果。
2.多次数据类型转化时,一定要用clear()来清空,才能正确转化,但clear()不会将
stringstream底层的string对象清空。
3.可以使用s. str("")方法将底层string对象设置为""空字符串。
4.可以使用s.str()将让stringstream返回其底层的string对象。


四、杂语:

下面就废话两句为什么要将这个类,因为本人做力扣看到了一道题,题目链接放在下面,大家看完本篇文章可以试一试这道题!

884. 两句话中的不常见单词

看见本道题题解大多都用到了stringstream,但是本人不了解此类的作用,便上网搜索整理出了一份笔记!

参考博客:stringstream的使用方法_stringstream的用法-CSDN博客;

希望看完本篇文章,对读者们也有一定的收获,如果有问题,可以在评论区互相讨论!

看完留下个免费的小心心吧,铁铁们!

这篇关于stringstream的详解!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/826969

相关文章

Java内存分配与JVM参数详解(推荐)

《Java内存分配与JVM参数详解(推荐)》本文详解JVM内存结构与参数调整,涵盖堆分代、元空间、GC选择及优化策略,帮助开发者提升性能、避免内存泄漏,本文给大家介绍Java内存分配与JVM参数详解,... 目录引言JVM内存结构JVM参数概述堆内存分配年轻代与老年代调整堆内存大小调整年轻代与老年代比例元空

Python中注释使用方法举例详解

《Python中注释使用方法举例详解》在Python编程语言中注释是必不可少的一部分,它有助于提高代码的可读性和维护性,:本文主要介绍Python中注释使用方法的相关资料,需要的朋友可以参考下... 目录一、前言二、什么是注释?示例:三、单行注释语法:以 China编程# 开头,后面的内容为注释内容示例:示例:四

mysql表操作与查询功能详解

《mysql表操作与查询功能详解》本文系统讲解MySQL表操作与查询,涵盖创建、修改、复制表语法,基本查询结构及WHERE、GROUPBY等子句,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随... 目录01.表的操作1.1表操作概览1.2创建表1.3修改表1.4复制表02.基本查询操作2.1 SE

MySQL中的锁机制详解之全局锁,表级锁,行级锁

《MySQL中的锁机制详解之全局锁,表级锁,行级锁》MySQL锁机制通过全局、表级、行级锁控制并发,保障数据一致性与隔离性,全局锁适用于全库备份,表级锁适合读多写少场景,行级锁(InnoDB)实现高并... 目录一、锁机制基础:从并发问题到锁分类1.1 并发访问的三大问题1.2 锁的核心作用1.3 锁粒度分

MySQL数据库中ENUM的用法是什么详解

《MySQL数据库中ENUM的用法是什么详解》ENUM是一个字符串对象,用于指定一组预定义的值,并可在创建表时使用,下面:本文主要介绍MySQL数据库中ENUM的用法是什么的相关资料,文中通过代码... 目录mysql 中 ENUM 的用法一、ENUM 的定义与语法二、ENUM 的特点三、ENUM 的用法1

MySQL count()聚合函数详解

《MySQLcount()聚合函数详解》MySQL中的COUNT()函数,它是SQL中最常用的聚合函数之一,用于计算表中符合特定条件的行数,本文给大家介绍MySQLcount()聚合函数,感兴趣的朋... 目录核心功能语法形式重要特性与行为如何选择使用哪种形式?总结深入剖析一下 mysql 中的 COUNT

一文详解Git中分支本地和远程删除的方法

《一文详解Git中分支本地和远程删除的方法》在使用Git进行版本控制的过程中,我们会创建多个分支来进行不同功能的开发,这就容易涉及到如何正确地删除本地分支和远程分支,下面我们就来看看相关的实现方法吧... 目录技术背景实现步骤删除本地分支删除远程www.chinasem.cn分支同步删除信息到其他机器示例步骤

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

mysql中的服务器架构详解

《mysql中的服务器架构详解》:本文主要介绍mysql中的服务器架构,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、mysql服务器架构解释3、总结1、背景简单理解一下mysqphpl的服务器架构。2、mysjsql服务器架构解释mysql的架

ModelMapper基本使用和常见场景示例详解

《ModelMapper基本使用和常见场景示例详解》ModelMapper是Java对象映射库,支持自动映射、自定义规则、集合转换及高级配置(如匹配策略、转换器),可集成SpringBoot,减少样板... 目录1. 添加依赖2. 基本用法示例:简单对象映射3. 自定义映射规则4. 集合映射5. 高级配置匹