在 C++ 中,可以使用 istringstream 配合 getline 根据分隔符来分割字符串。
istringstream, ostringstream, stringstream区别#
这 3 个 stream 都可以通过头文件 #include <sstream> 引入。三者的区别如下:
ostringstream : 用于执行 C 风格字符串的输出操作。
istringstream : 用于执行 C 风格字符串的输入操作。
stringstream : 同时支持 C 风格字符串的输入输出操作。
首先,我们使用一个字符串s来初始化输入字符串流istringstream
string s = "a/b/c/d";
istringstream iss(s);
然后,我们使用 getline 函数通过 iss 对字符串进行分割,getline 函数的原型为
istream& getline ( istream &is , string &str , char delim );
第一个参数为 is 表示一个 istringstream,这里就是 iss,
第二个参数表示我们要将字符串分割的结果通过 getline 逐个放入 str 中,
第三个参数为分隔符,注意分隔符只能为字符型。示例如下:
#include <sstream>
#include <iostream>
#include <vector>
using namespace std;
int main()
{
string s = "a/b/c/d";
vector<string> res;
stringstream iss(s);
string buffer;
while(getline(iss, buffer, '/'))
{
res.push_back(buffer);
}
for(auto s:res) cout<<s<<" ";
return 0;
}
封装#
可以将字符串分割简单地封装成一个split函数:
#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;
}
stringstream分割任意字符
于 2022-03-24 14:51:14 首次发布