Modernes C++ programmieren

Okt 23, 2024

lst-0826-book.cpp

// https://godbolt.org/z/3r5E1f9YP 
#include <algorithm>
#include <iostream>
#include <vector>
#include <string>
#include <string_view>
#include <ranges>
using std::vector; using std::string; using std::string_view;
using namespace std::literals; using std::find_if;
vector<string> demo_split(string_view s) {
  vector<string> result{};
  auto it = s.begin();
  while(it != s.end()) {
    // bis normales Zeichen:
    it = find_if(it, s.end(), [](char c) { return c!=' '; });
     // bis Leerzeichen:
     auto jt = find_if(it, s.end(), [](char c) { return c==' '; });
    if(it!=s.end())
      result.push_back(string(it, jt)); // Kopie ins Ergebnis
    it = jt;
  }
  return result;
}
int main() {
  auto text = "Der Text ist kurz"sv;
  auto res = demo_split(text);
  std::ranges::for_each(res, [](const string &e) {
      std::cout << "[" << e << "] "; });
  std::cout << '\n'; // Ausgabe: [Der] [Text] [ist] [kurz]
  // oder gleich mit views::split:
  for(auto word : text | std::views::split(" "sv)) {
    std::cout << "[";
    for(auto c : word) std::cout << c;
    std::cout << "] ";
  } // Ausgabe: [Der] [Text] [ist] [kurz]
}