【C++】stringstream类 最全超详细解析(什么是stringstream? stringstrem有哪些作用? 如何在算法中应用?)

这篇具有很好参考价值的文章主要介绍了【C++】stringstream类 最全超详细解析(什么是stringstream? stringstrem有哪些作用? 如何在算法中应用?)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、前言

二、stringstream 是什么 ? 

 三、stringstream 的用法

 ✨构造函数

 ✨输出字符串

 ✨两种构造函数带来的不同

 ✨修改、清空 stringstream 内容

 四、stringsteam 的用途

✨ 利用 stringstream 去除字符串空格

✨ 利用 stringstream 指定字符分割字符串

✨ 类型转换

五、常考面试题

 ✨计算字符串中的单词个数:

 ✨ 反转字符串中的单词 (重点)

六、共勉  


一、前言

       想必大家在做 LeetCode 算法题的时候会经常看到有使用 stringstream 类 处理字符串,由于自己对这个类不是很了解,查了资料在这里记录一下。
       所以本文通过收集资料将其进行总结,主要介绍如何使用 stringstream 处理在算法练习或竞赛中遇到的输入输出问题。

二、stringstream 是什么 ? 

 stringstreamC++  提供的专门用于处理字符串的 输入输出 流类。

  • 这里稍微提一下c++中 “流” 的概念。在C++中,将数据从一个对象到另一个对象的流动抽象为“流”。流在使用前要被创建,使用后要被删除。数据的输入与输出是通过 I/O 流实现的,cin 和 cout 是c++预定义的流类对象。 

stringstream c++,C++,c++,开发语言,c语言,算法,面试

  •  stringstream 定义于头文件 <sstream>,它其实是个别名,具体定义如下:
typedef basic_stringstream<char> stringstream;
  • 类模板 std::basic_stringstream 实现基于字符串的流上的输入与输出操作。它等效地存储一个  std::basic_string 的实例,并在其上进行输入与输出操作。继承图如下: 

stringstream c++,C++,c++,开发语言,c语言,算法,面试

 三、stringstream 的用法

 ✨构造函数

  •  stringstream  的构造函数有很多,这里列举最为常用的两个构造函数:

1. 创建一个对象,向对象输入字符串:

    // 创建一个 string类  对象 s
	string s("hello stringstream");
	// 创建一个 stringstraeam类 对象 ss
	stringstream ss;

	// 向对象输入字符串 : "<<" 表示向一个对象中输入
	ss << s;
	cout << ss.str() << endl;

stringstream c++,C++,c++,开发语言,c语言,算法,面试

2. 在创建对象的时候使用字符串初始化:

    // 创建一个 stringstraeam类 对象 ss
	stringstream ss("hello stringstream");

	cout << ss.str() << endl;

stringstream c++,C++,c++,开发语言,c语言,算法,面试

 两种方式都可以创建对象,但创建后的对象用法不一样,详见后面的示例。

 ✨输出字符串

 stringstream  可以将存储于内部的字符串输出,需要调用 str() 函数,不可直接输出:

std::cout << ss.str() << std::endl;

// std::cout << ss << std::endl; 		// 错误不可直接输出

 注意:cout << ss << endl;   是错误的,不可以直接输出

✨两种构造函数带来的不同

 上面阐述了两种构造函数,利用不同的构造函数创建对象,对象具体的操作也不同:

1. 第一种构造方式

#include <iostream>
#include <sstream>
using namespace std;

int main()
{
    stringstream ss1;
    ss1 << "fre";
    ss1 << "gre";
    cout << ss1.str() << endl;
    
    return 0;
}

/*
输出:
fregre
*/

可以发现,两个字符串直接拼接在了一起 

2. 第二种构造方式

#include <iostream>
#include <sstream>
using namespace std;

int main()
{
    string str("asd");
    // 第二种构造
    stringstream ss2(str);
    cout << ss2.str() << endl;
    
    // 第一种构造
    ss2 << "r";
    cout << ss2.str() << endl;

    ss2 << "13";
    cout << ss2.str() << endl;

    ss2 << "hy";
    cout << ss2.str() << endl;
    
    return 0;
}

/*
输出:
asd
rsd
r13
r13hy
*/

 可以发现,利用第一种构造函数创建对象时,输入字符串后直接进行字符串拼接,而第二种构造方式,在进行字符串拼接时,首先把原本的字符串覆盖掉,之后再进行拼接。

 如果不想原来的字符串被覆盖,则需要换一种构造方式,如下:

#include <iostream>
#include <sstream>
using namespace std;

int main()
{
    ostringstream ss("1 2 3 4 ", std::ios_base::ate);	// append 方式追加
    cout << ss.str() << endl;

    ss << "5 3 4";
    cout << ss.str() << endl;
    
    return 0;
}
/*
输出:
1 2 3 4 
1 2 3 4 5 3 4
*/

  ✨修改、清空 stringstream 内容

 stringstream  的内容可以通过 str() 函数进行修改、清空:

#include <iostream>
#include <sstream>
using namespace std;

int main()
{
    stringstream ss("hello string");
    cout << ss.str() << endl;

    // 修改内容
    ss.str("hello stringstream");
    cout << ss.str() << endl;

    // 清空内容
    ss.str("");
    cout << ss.str() << endl;

    return 0;
}

/*
输出:
fghewoo
123456

*/

stringstream c++,C++,c++,开发语言,c语言,算法,面试

 四、stringsteam 的用途

✨ 利用 stringstream 去除字符串空格

stringstream 默认是以空格来分割字符串的,利用 stringstream 去除字符串空格非常方便: 

#include <iostream>
#include <sstream>
using namespace std;

int main()
{
    stringstream ss("hello string and stringstream");
    cout << ss.str() << endl;
    
	cout<< endl;
    
    string str;
    // 注意: stringstream 是一个单词一个单词 ”流入“ string 的
    while (ss >> str)
    {
        cout << str << endl;
    }
    
    return 0;
}

/*
输出:
hello string and stringstream

hello 
string 
and
stringstream
*/

stringstream c++,C++,c++,开发语言,c语言,算法,面试

✨ 利用 stringstream 指定字符分割字符串

       上面描述了利用 stringstream 去除字符串空格,其实就是利用空格来分割字符串,同样,也可以指定其他字符对字符串进行分割,这需要与 getline() 函数搭配使用,下面以逗号分割字符串为例:

getline 详解:
getline()的原型是istream& getline ( istream &is , string &str , char delim );

  • 其中 istream &is 表示一个输入流,
  • 例如,可使用cin;
  • string str ; getline(cin ,str)
  • 也可以使用 stringstream
  • stringstream ss(“test#”) ; getline(ss,str)
  • char delim表示遇到这个字符停止读入,通常系统默认该字符为’\n’,也可以自定义字符
#include <iostream>
#include <sstream>
using namespace std;

int main()
{
    string source = "abc,123,<!>";
    stringstream ss(source);
    cout << ss.str() << endl;
    
	cout<< endl;

    string str;
    while (getline(ss, str, ','))
    {
        cout << str << endl;
    }

    return 0;
}

/*
输出:
abc,123,<!>

abc
123
<!>
*/

stringstream c++,C++,c++,开发语言,c语言,算法,面试

 上述代码以逗号作为分割依据来分割字符串,同样的还可以扩展到其他字符。

 ✨ 类型转换

使用 stringstream 进行类型转换

  •  以下是一个使用 stringstream 将数字转换为字符串的例子:
#include <sstream>
#include <iostream>
#include <string>
 
int main() {
    int num = 123;
    std::stringstream ss;
    ss << num; // 将整数放入流中
    std::string str = ss.str(); // 使用str()函数 从流中提取字符串
    std::cout << str << std::endl; // 输出:123
}
  • 反过来,也可以将字符串转换为数值类型: 
#include <sstream>
#include <iostream>
#include <string>
 
int main() {
    std::string str = "456";
    std::stringstream ss(str); // 初始化stringstream
    int num;
    ss >> num; // 从流中提取整数
    std::cout << num << std::endl; // 输出:456
}

五、常考面试题

 ✨计算字符串中的单词个数:

输入:“hello world c plus plus”
输出:5 

#include <iostream>
#include <sstream>
#include <string>

using namespace std;

int main() {
	string str = "hello world c plus plus";
	int count = 0;
	stringstream ss(str);
	string word;
	while (ss >> word)
		count++;
	cout << count << endl;

	system("pause");
	return 0;
}

 ✨ 反转字符串中的单词 (重点)

链接:151. 反转字符串中的单词 

stringstream c++,C++,c++,开发语言,c语言,算法,面试

class Solution {
public:
    string reverseWords(string s) 
    {
         string res,temp;
         stringstream ss(s);
         while(ss>>temp)
         {
            res = temp + " " + res;
         }
         if(!res.empty())
         {
            res.pop_back();
         }
         return res;
    }
};

六、共勉  

以下就是我对 stringstream类 的理解,如果有不懂和发现问题的小伙伴,请在评论区说出来哦,同时我还会继续更新对C++  vector 类的理解,请持续关注我哦!!!    stringstream c++,C++,c++,开发语言,c语言,算法,面试文章来源地址https://www.toymoban.com/news/detail-847367.html

到了这里,关于【C++】stringstream类 最全超详细解析(什么是stringstream? stringstrem有哪些作用? 如何在算法中应用?)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • linux内网穿透应用场景有哪些?快解析有什么用处?

    随着网络技术的不断发展,无论是工作上还是在生活中人们对网络的依赖和需求越来越高。Linux内网穿透作为一种创新的解决方案,为我们提供了无限可能。 首先我们了解一下Linux操作系统。Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多

    2024年02月14日
    浏览(49)
  • 全面解析:oa系统是什么?有哪些好用的oa系统

    oa系统是什么?有哪些好用的oa系统 OA系统全称为 Office Automation ,即 办公自动化系统 。它是一种专门为企业和机构的日常办公工作提供服务的综合性软件平台,具有信息管理、流程管理、知识管理(档案和业务管理)、协同办公等多种功能。 oa系统模板https://www.jiandaoyun.com

    2024年02月08日
    浏览(38)
  • C/C++ static关键字详解(最全解析,static是什么,static如何使用,static的常考面试题)

    目录 一、前言  二、static是什么? 三、static修饰的对象是什么?   四、C 语言中的 static  🍎static的C用法  🍉static的重点概念  🍐static修饰局部变量  💦static在修饰局部变量和函数的作用  🍓static修饰全局变量和函数 💦static在修饰全局变量和函数的作用

    2024年02月05日
    浏览(47)
  • 什么是 API 安全?详细解析

    随着 API 技术的普及,API 安全成为了一个越来越重要的问题。本文将介绍什么是 API 安全,以及目前 API 面临的安全问题和相应的解决方案。 在开始,不熟悉 API 的同学们前我们可以先了解下: 什么是 API?深入了解 API 的概念和应用 API 安全是指保护 API 免受恶意攻击和滥用的

    2024年02月16日
    浏览(28)
  • 【Azure】微软 Azure 云中的 SLA 解析:什么是 SLA、影响 SLA 的因素有哪些、如何进行计算 SLA

    本文将讨论微软 Azure 云中的服务级别协议(SLA)。在当今数字化时代,云计算已成为许多企业和组织不可或缺的一部分。SLA 是云服务提供商与客户之间的合同,它定义了云服务的可用性和性能指标,以确保客户在使用云服务时能够得到稳定、可靠的体验。通过本文的阅读,

    2024年02月15日
    浏览(47)
  • 【C++】哈希/散列详细解析

    前言:上篇文章介绍了unordered_set和unordered_map序列关联式容器,它们之所以效率比较高,是因为其底层使用了哈希结构。,所以这篇文章我们就来详细讲解一下哈希表。有关unordered序列关联式容器的知识,请移步至这篇文章:unordered_map与unordered_set(系列关联式容器) 顺序结

    2024年02月06日
    浏览(46)
  • “DAO”是什么?从Web发展详细解析什么是DAO

    “DAO”是什么,相信很多人对这个词不陌生,自从全球顶级风投机构红杉资本,把自己的Twitter简介改成了“从想法到落地,我们帮助富有冒险精神的人打造伟大的DAO”,虽然红杉资本随后删除了这个简介,并解释称这是一次“罗夏测试”;但整个投研圈和互联网圈,对元宇宙

    2024年02月13日
    浏览(35)
  • C++ 面试必备:常见 C++ 面试题汇总及详细解析

    C++ 作为一门重要的编程语言,其在面试中常常是热门的考察对象。本文将会介绍一些常见的 C++ 面试题,帮助 C++ 面试者避免很多不必要的困惑和迷惑。每个问题都有相对应的答案,以便各位同学快速查阅。 C++和C的区别是什么? C++ 是 C 的超集,也就是说, C++ 包括了 C 的所

    2024年02月07日
    浏览(36)
  • C++实现:学生管理系统(详细解析)

    目录 1.题目要求 2.需求分析 3.整体设计 4.详细设计 主函数设计  学科科目类 主菜单 读取文件与写入文件  效果如下  添加学生信息 删除学生信息 ​编辑 修改学生信息 显示信息列表 显示学生列表 将学生列表按学号升序排列 将学生列表按平均分降序排列,平均分相同的再按

    2023年04月11日
    浏览(42)
  • 快速排序算法C++实现(超详细解析!!!!)

    目录 一、前言 (1)分治算法 (2)分治算法解题方法     1.分解:     2.治理:     3.合并: 二、快速排序 1.问题分析 2.算法设计     (1)分解:     (2)治理 :     (3)合并:     (4)基准元素的选取: 3.算法分析 三、AC代码  四、共勉     快速排序,其实是一种

    2024年02月03日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包