fork(1) download
  1. #include <iostream>
  2. #include <string>
  3. #include <vector>
  4.  
  5. using namespace std; // я ленивый, да
  6.  
  7. void split(const string& source, const string& delimiters, vector<string>& result)
  8. {
  9. // поддерживаем следующий инвариант: символ по индексу есть начало нового куска
  10. // пропускаем разделители в начале
  11. auto start = source.find_first_not_of(delimiters);
  12. while (start != string::npos)
  13. {
  14. // ищем следующий конец куска
  15. auto end = source.find_first_of(delimiters, start);
  16. // и его длину
  17. auto len = end == string::npos ? string::npos : (end - start);
  18. // запоминаем найденный кусок
  19. result.push_back(source.substr(start, len));
  20. // и переходим к следующему
  21. start = source.find_first_not_of(delimiters, end);
  22. }
  23. }
  24.  
  25. int main()
  26. {
  27. vector<string> result;
  28. split("'twas brillig, and the slithy toves did gyre and gimble in the wabe!",
  29. "' !,\t",
  30. result);
  31. split("all mimsy were the borogoves",
  32. "' !,\t",
  33. result);
  34. for (auto& r : result)
  35. cout << r << endl;
  36. return 0;
  37. }
Success #stdin #stdout 0s 3476KB
stdin
Standard input is empty
stdout
twas
brillig
and
the
slithy
toves
did
gyre
and
gimble
in
the
wabe
all
mimsy
were
the
borogoves