More than code

More Than Code
The efficiency of your iteration of reading, practicing and thinking decides your understanding of the world.
  1. 首页
  2. C++
  3. 正文

Daily C/C++ 字符串分割

2021年5月6日 540点热度 0人点赞 0条评论

C++ 字符串分割

用过python语言的同学肯定知道,字符串split是一个非常好用的工具,但是很可惜的是C++并没有这样的函数((string, char) => vector<string>)供我们调用

这里我们来说一下用流实现的方法

首先明确流是什么?

流是一个对象,他创建了目标与源的连接。流可以从源获取信息,或者向目标地提供信息

对输入流来说,主要从中提取一些东西 operator>>

对输出流来说,主要将某些东西压入其中 operator<<

C++有一个用于连接到字符串的流 std::istringstream

这个流有一个属性,他的operator>>会生成一个到下一个空格的字符串

std::istream_iterator是一个可以连接到输入流的迭代器

他提供基本的接口,*用于获取输入的元素,++用于获取下一个元素,++运算符实际上是在从流中获取东西

我们使用istream_iterator<std::string>用于从流中读取字符串

当流已经没有内容可以从源中提取的时候,他会向迭代器发出信号,迭代器会被标记为已完成

std::istream_iterator的默认构造函数会将它标记为已完成的迭代器

我们要把结果储存到一个vector中,我们需要一个begin和一个end,两个迭代器用于标识结果的头和尾

那么begin就是输入迭代器的开始,即std::istream_iterator<std::string>(iss)

而end就是我们标记为已完成的迭代器,即std::istream_iterator<std::string>()

那么我们的代码就可以这样写

std::string text = "words need to split";

std::istringstream iss(text);
std::vector<std::string> result((std::istream_iterator<std::string>(iss)),
                                std::istream_iterator<std::string>());

或者这样

std::string text = "words need to split";

std::istringstream iss(text);
std::vector<std::string> result(std::istream_iterator<std::string>{iss},
                                std::istream_iterator<std::string>());

输入迭代器
参考文章

标签: c++
最后更新:2021年5月8日

sheep

think again

点赞
< 上一篇
下一篇 >

文章评论

取消回复

COPYRIGHT © 2021 heavensheep.xyz. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS