fork(1) download
  1. #include <iostream>
  2. #include <vector>
  3. #include <map>
  4. #include <string>
  5.  
  6. // Liste der bekannten Substrings
  7. const std::map<int, std::vector<std::string>> mTeilstrings = {
  8. {1, {"[8A]", "[UKE]"}},
  9. {2, {"[Dings da]", "[DingsBums]"}},
  10. {3, {"[GF]", "[MOD]", "[MOD3]", "[MOD6]"}},
  11. {4, {"[Weiss]", "[Rot]", "[Orange-Blau]"}}
  12. };
  13.  
  14.  
  15. auto parse_line(std::string line,
  16. const std::map<int, std::vector<std::string>> &substring_groups)
  17. {
  18. std::vector<std::pair<std::string, int>> result;
  19. for (auto const& kv : substring_groups)
  20. {
  21. for (auto const &substring: kv.second)
  22. {
  23. std::string::size_type pos = 0;
  24. while ((pos = line.find(substring, pos)) != std::string::npos)
  25. {
  26. result.push_back(std::make_pair(substring, kv.first));
  27. pos += substring.length();
  28. }
  29. }
  30. }
  31. return result;
  32. }
  33.  
  34. int main()
  35. {
  36. for(std::string line; std::getline(std::cin, line);)
  37. {
  38. auto substring_pairs = parse_line(line, mTeilstrings);
  39. std::cout << "Zeile \"" << line << "\" wird zerlegt in '";
  40. for (auto pair: substring_pairs)
  41. std::cout << "{\"" << pair.first << "\", " << pair.second << "}, ";
  42. std::cout << '\n';
  43. }
  44. }
Success #stdin #stdout 0s 5324KB
stdin
[8A][Dings da][Orange-Blau]
[MOD][Weiss][UKE]
[GF][MOD3][Dings da]
[MOD][Black][UKE]
[GF][MOD3][Dings da][GF][MOD3][Dings da]
stdout
Zeile "[8A][Dings da][Orange-Blau]" wird zerlegt in '{"[8A]", 1}, {"[Dings da]", 2}, {"[Orange-Blau]", 4}, 
Zeile "[MOD][Weiss][UKE]" wird zerlegt in '{"[UKE]", 1}, {"[MOD]", 3}, {"[Weiss]", 4}, 
Zeile "[GF][MOD3][Dings da]" wird zerlegt in '{"[Dings da]", 2}, {"[GF]", 3}, {"[MOD3]", 3}, 
Zeile "[MOD][Black][UKE]" wird zerlegt in '{"[UKE]", 1}, {"[MOD]", 3}, 
Zeile "[GF][MOD3][Dings da][GF][MOD3][Dings da]" wird zerlegt in '{"[Dings da]", 2}, {"[Dings da]", 2}, {"[GF]", 3}, {"[GF]", 3}, {"[MOD3]", 3}, {"[MOD3]", 3},