在很多字符串类库里都实现了split函数。不过在std里没有实现。在这里拿出几个:
1. 用单字符作为分隔
1 #include <string>
2 #include <vector>
3 using namespace std;
4
5 vector<string> split(string strtem,char a)
6 {
7 vector<string> strvec;
8
9 string::size_type pos1, pos2;
10 pos2 = strtem.find(a);
11 pos1 = 0;
12 while (string::npos != pos2)
13 {
14 strvec.push_back(strtem.substr(pos1, pos2 - pos1));
15
16 pos1 = pos2 + 1;
17 pos2 = strtem.find(a, pos1);
18 }
19 strvec.push_back(strtem.substr(pos1));
20 return strvec;
21 }
2. 由多个分隔符来分隔:
1 std::vector<std::string> splitString(std::string srcStr, std::string delimStr, bool repeatedCharIgnored)
2 {
3 std::vector<std::string> resultStringVector;
4 std::replace_if(srcStr.begin(), srcStr.end(),
5 [&](const char& c){if (delimStr.find(c) != std::string::npos){ return true; } else{ return false; }}/*pred*/, delimStr.at(0));
6 //将出现的所有分隔符都替换成为一个相同的字符(分隔符字符串的第一个)
7 size_t pos = srcStr.find(delimStr.at(0));
8 std::string addedString = "";
9 while (pos != std::string::npos) {
10 addedString = srcStr.substr(0, pos);
11 if (!addedString.empty() || !repeatedCharIgnored) {
12 resultStringVector.push_back(addedString);
13 }
14 srcStr.erase(srcStr.begin(), srcStr.begin() + pos + 1);
15 pos = srcStr.find(delimStr.at(0));
16 }
17 addedString = srcStr;
18 if (!addedString.empty() || !repeatedCharIgnored) {
19 resultStringVector.push_back(addedString);
20 }
21 return resultStringVector;
22 }
来源:https://www.cnblogs.com/tyche116/p/9377330.html