打怪升级之istringstream介绍

istringstream是C++中的一个基本输入流类,它通过typedef从basic_istringstream<char>派生而来,主要用于处理字符串输入。这个类支持像流一样的操作,如使用operator>>进行提取。在示例中,展示了如何使用istringstream从字符串中按空格或特定分隔符读取内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

istringstream类

istringstream本质不是类,是一个宏,或者说是一个流:

typedef basic_istringstream<char> istringstream;

istringstream从basic_istringstream的char专用项而来。这一部分让人看得摸不着头脑的原因是因为大量使用了stream的语法,如果有像我一样的新手的话强烈建议去找C++PrimerPlus去看看里面讲。

援引自笔者一个朋友(大佬)的原话是这样的:
istringstream是一个宏,通过typedef展开到basic_istringstream。

这个basic_istringstream继承自basic_istream并重载了operator>>运算符。

template <class Elem, class Tr = char_traits<Elem>, class Alloc = allocator<Elem>>
class basic_istringstream : public basic_istream<Elem, Tr>

可以看到确实是继承自basic_istream类,且basic_istream类中也确实有基础运算符。这解释了为什么这个对象可以像流一样用。

iostream比较像一个黑箱,里边包装了文件或字符串操作。具体来说,(i/o/)fstream封装了文件操作,(i/o/)stringstream封装了字符串操作,他们一起抽象为(i/o/io)stream。

istringstream类支持>>操作,ostringstream类支持<<操作,stringstream类支持>>和<<操作。

通过这样流对象的构造函数,我们可以写入或写出一些东西。

basic_istringstream(
    basic_istringstream&& right);

初始化,并加载right值作为一种流。

案例

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

int main() 
{
	istringstream is("I am\tlove C++\nand I love C");
	string str;
	//默认是空格或者回车符或者tab,会输出如下内容:I am love C++ and I love C
	while (is >> str) {
		cout << str << endl;
	}

	getchar();
	return 0;
}

结果:

I
am
love
C++
and
I
love
C

空格或者\会作为流的分界符,一个一个输出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

考琪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值