Garaguru's Blog Just A Normal Student

C++ 分割字符串的两种优雅方法

2018-09-29
Garaguru

使用 sstream + getline

第一种,最简单常用的方法

#include <string>
#include <iostream>
#include <algorithm>
#include <sstream>
using namespace std;
int main(){
  istringstream ss("heelleafewwweflliwee");
  string str;
  while(getline(ss,str,'a')){
    cout<<str<<endl;
  }
}

以上方法的局限性:只能以单个字符为单位分割

自己实现一个 split 函数

第二种,实现稍微复杂一些,但功能强大

#include <algorithm>
#include <iostream>
#include <iterator>
#include <string>
#include <vector>

std::vector<std::string> split(const std::string& s, const std::string& delim,
                               const bool keep_empty = true) {
  using namespace std;
  vector<string> result;
  if (delim.empty()) {
    result.push_back(s);
    return result;
  }
  string::const_iterator substart = s.begin(), subend;
  while (true) {
    subend = search(substart, s.end(), delim.begin(), delim.end());
    if (keep_empty || substart != subend) result.emplace_back(substart, subend);
    if (subend == s.end()) break;
    substart = subend + delim.size();
  }
  return result;
}

int main() {
  using namespace std;
  const vector<string> words =
      split("So a close a no a matter a how a far", " a ");
  copy(words.begin(), words.end(), ostream_iterator<string>(cout, "\n"));
}

Similar Posts

上一篇 详解 CAP BASE

Content