【C++】使用istringstream根据分隔符分割字符串

在 C++ 中,可以使用 istringstream 配合 getline 根据分隔符来分割字符串。

istringstream, ostringstream, stringstream区别#

这 3 个 stream 都可以通过头文件 #include <sstream> 引入。三者的区别如下:

  • ostringstream : 用于执行 C 风格字符串的输出操作。
  • istringstream : 用于执行 C 风格字符串的输入操作。
  • stringstream : 同时支持 C 风格字符串的输入输出操作。

通常,ostringstream 类用来格式化字符串,避免申请大量的缓冲区,替代 sprintf。该类能够根据内容自动分配内存,其对内存管理也是相当到位。这篇文章中,我们使用 istringstream 来分割字符串。

字符串分割#

首先,我们使用一个字符串s来初始化输入字符串流istringstream

Copy
string s = "a/b/c/d"; istringstream iss(s);

然后,我们使用 getline 函数通过 iss 对字符串进行分割,getline 函数的原型为

Copy
istream& getline ( istream &is , string &str , char delim );

第一个参数为 is 表示一个 istringstream,这里就是 iss,第二个参数表示我们要将字符串分割的结果通过 getline 逐个放入 str 中,第三个参数为分隔符,注意分隔符只能为字符型。示例如下:

Copy
#include <sstream> #include <iostream> #include <vector> using namespace std; int main() { string s = "a/b/c/d"; istringstream iss(s); string buffer; while(getline(iss, buffer, '/')) { cout<<buffer<<endl; } return 0; }

输出:

如果我们将字符串 s 设为 a/b//c//d,代码其余不变,则结果为

可以看到,两个连续的分隔符会被解析为空串。

封装#

可以将字符串分割简单地封装成一个split函数:

Copy
#include <sstream> #include <iostream> #include <vector> using namespace std; /** *分割字符串,输入待分割的字符串s以及分割符sep; *这里没有对分割可能得到的空串进行处理,可以直接删除空串 */ vector<string> split(string& s, char sep) { istringstream iss(s); vector<string> res; string buffer; while(getline(iss, buffer, sep)){ res.push_back(buffer); } return res; } int main() { string s = "a/b/c/d"; vector<string> res = split(s, '/'); for(int i=0; i<res.size(); i++) cout<<res[i]<<" "; cout<<endl; return 0; }

参考#

1、https://blog.csdn.net/qq_36743440/article/details/91999615
2、https://segmentfault.com/a/1190000020863841
3、https://blog.csdn.net/hellokandy/article/details/54585174

posted @   Flix  阅读(9852)  评论(0编辑  收藏  举报
编辑推荐:
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
阅读排行:
· 如何给本地部署的DeepSeek投喂数据,让他更懂你
· 超详细,DeepSeek 接入PyCharm实现AI编程!(支持本地部署DeepSeek及官方Dee
· 用 DeepSeek 给对象做个网站,她一定感动坏了
· .NET 8.0 + Linux 香橙派,实现高效的 IoT 数据采集与控制解决方案
· .NET中 泛型 + 依赖注入 的实现与应用
点击右上角即可分享
微信分享提示
CONTENTS