vector<string> MultiSplitStr(const string &s, const string &seperator) { vector<string> result; typedef string::size_type string_size; string_size i = 0; while(i!=s.size()){ int flag = 0; while(i!=s.size()&&flag==0){ flag = 1; for(string_size x =0;x<seperator.size();++x){ if(s[i]==seperator[x]){ ++i;flag=0;break; } } } flag=0;string_size j=i; while(j!=s.size()&&flag==0){ for(string_size x=0;x<seperator.size();++x){ if(s[j]==seperator[x]){ flag=1;break; } } if(flag==0) ++j; } if(i!=j){ result.push_back(s.substr(i,j-i));i=j; } } return result; }
时间: 2024-02-14 21:32:04 浏览: 99
这段代码是一个多字符分割字符串的函数。它接受一个字符串和一个分隔符作为参数,并将分隔后的子字符串存储在一个 vector 容器中。
函数中使用了两个循环。第一个循环用于查找分隔符的起始位置,将起始位置保存在变量 `i` 中。在这个循环中,使用了一个标志变量 `flag` 来判断是否找到了分隔符。如果找到了分隔符,则将 `i` 增加,并将 `flag` 设置为 0,从而继续查找下一个分隔符的起始位置。
第二个循环用于查找分隔符的结束位置,将结束位置保存在变量 `j` 中。在这个循环中,同样使用了 `flag` 变量来判断是否找到了分隔符。如果没有找到分隔符,则将 `j` 增加,继续查找下一个字符,直到找到分隔符为止。
在循环结束后,如果 `i` 不等于 `j`,则说明找到了一个子字符串,使用 `substr` 函数截取从 `i` 到 `j` 之间的子字符串,并将其添加到 vector 容器中。
最后,返回存储了分隔后子字符串的 vector 容器。
总结起来,这个函数的作用是根据多个字符的分隔符将一个字符串进行切割,然后将切割后的子字符串保存到 vector 容器中。
相关问题
现在有一类型:std::vector<std::pair<std::string, std::vector<string>>>,请问如何分别取到std::pair中的std::string和std::vector<string>呢
要分别取到`std::pair`中的`std::string`和`std::vector<string>`,可以使用`std::get`函数。示例代码如下:
```cpp
#include <iostream>
#include <vector>
#include <string>
int main() {
std::vector<std::pair<std::string, std::vector<std::string>>> vec;
// 添加一些数据到vec中
vec.push_back(std::make_pair("pair1", std::vector<std::string>{"string1", "string2", "string3"}));
vec.push_back(std::make_pair("pair2", std::vector<std::string>{"string4", "string5"}));
vec.push_back(std::make_pair("pair3", std::vector<std::string>{"string6"}));
// 遍历vec,取出每个pair中的string和vector<string>
for (const auto& pair : vec) {
std::cout << "First string: " << std::get<0>(pair) << std::endl;
std::cout << "Second vector of string: ";
const auto& vectorOfString = std::get<1>(pair);
for (const auto& str : vectorOfString) {
std::cout << str << " ";
}
std::cout << std::endl;
}
return 0;
}
```
输出结果:
```
First string: pair1
Second vector of string: string1 string2 string3
First string: pair2
Second vector of string: string4 string5
First string: pair3
Second vector of string: string6
```
定义一个函数vector<string> split(const string& s, const string& w),实现功能为利用w或者默认空白字符为分隔符将s分隔成若干子串,并以向量的向形式返回这些子串。C++
好的,下面是你所需要的函数实现:
```cpp
#include <vector>
#include <string>
using namespace std;
vector<string> split(const string& s, const string& w = " ") {
vector<string> result;
string::size_type start = 0, end = 0;
while ((end = s.find(w, start)) != string::npos) {
if (end != start) {
result.push_back(s.substr(start, end - start));
}
start = end + w.size();
}
if (start < s.size()) {
result.push_back(s.substr(start));
}
return result;
}
```
这个函数的实现比较简单,使用了 C++ 标准库中的 string 和 vector 类型。其中,s 是要被分隔的字符串,w 是作为分隔符的字符串,默认为空白字符。
函数内部使用了一个 while 循环来不断查找分隔符,如果找到了就将分隔符前面的子串加入到结果向量中,然后将搜索起始位置更新为当前位置加上分隔符长度。最后,如果字符串的结尾还有剩余的字符,也需要将它们加入到结果向量中。
调用时可以只给出要分隔的字符串 s,此时默认使用空白字符作为分隔符。如果需要使用其他的分隔符,也可以将它作为第二个参数传入函数中。
阅读全文