C++ :: Aufgabe #347 :: Lösung #1
1 Lösung
#347
Unikat- Liste aus zwei Zeichenketten/Sätzen
Anfänger - C++
von JKooP
- 02.04.2021 um 18:13 Uhr
Gegeben sind zwei Zeichenketten (a, b) bestehend aus Kleinbuchstaben und Leerzeichen.
Es sollen die Wörter in ein neues String- Array überführt werden,
die genau einmal in beiden Zeichenketten vorkommen (Unikate).
Beispiel 1:
a = „der pfannkuchen schmeckt süß“
b = „der pfannkuchen schmeckt salzig“
Lösung: { „süß“, „salzig“ }
Beispiel 2:
a = „apfel apfel“
b = „banane“
Lösung: { „banane“ }
Beispiel 3:
a = „der pfannkuchen schmeckt“
b = „der pfannkuchen schmeckt“
Lösung: { }
Erstelle eine Methode/Funktion, die solch ein String- Array zurückgibt.
Viel Spaß
Es sollen die Wörter in ein neues String- Array überführt werden,
die genau einmal in beiden Zeichenketten vorkommen (Unikate).
Beispiel 1:
a = „der pfannkuchen schmeckt süß“
b = „der pfannkuchen schmeckt salzig“
Lösung: { „süß“, „salzig“ }
Beispiel 2:
a = „apfel apfel“
b = „banane“
Lösung: { „banane“ }
Beispiel 3:
a = „der pfannkuchen schmeckt“
b = „der pfannkuchen schmeckt“
Lösung: { }
Erstelle eine Methode/Funktion, die solch ein String- Array zurückgibt.
Viel Spaß
#1
von JKooP (18090 Punkte)
- 24.05.2021 um 19:54 Uhr
C++ 17
C-Code
#include <iostream>
#include <vector>
#include <tuple>
#include <string>
#include <map>
using namespace std;
vector<string> string_split(const string& s, const char& del = ' ') {
vector<string> v;
string w = "";
for (const auto& c : s) {
if (c == del) {
v.push_back(w);
w = "";
}
else {
w += c;
}
}
v.push_back(w);
return v;
}
template<typename T>
bool map_contains_key(const map<T, int>& m, const T& compare) {
for (const auto& k : m)
if (k.first == compare)
return true;
return false;
}
template<typename T>
vector<T>vector_concat(const vector<T>& v1, const vector<T>& v2) {
vector<T>c{ v1 };
c.insert(c.end(), v2.begin(), v2.end());
return c;
}
vector<string> unique_words(const string& a, const string& b) {
map<string, int>m;
vector<string>v;
auto concat{ vector_concat(string_split(a), string_split(b)) };
for (const auto& i : concat)
if (map_contains_key(m, i))
m[i]++;
else
m.emplace(i, 1);
for (const auto& i : m)
if (i.second == 1)
v.push_back(i.first);
return v;
}
int main()
{
vector<tuple<string, string>>v{
{"der pfannkuchen schmeckt suess", "der pfannkuchen schmeckt salzig"},
{"apfel apfel", "banane"} ,
{"der pfannkuchen schmeckt", "der pfannkuchen schmeckt"} };
for (const auto& i : v) {
for (const auto& k : unique_words(get<0>(i), get<1>(i)))
cout << k << ", ";
cout << "\n";
}
}
Kommentare:
Für diese Lösung gibt es noch keinen Kommentar
Seite 1 von 0
1
