#include #include #include #include #include using namespace std; vector words { "anda", "ball", "banden", "bark", "bilar", "bord", "dina", "fara", "fast", "fika", "finn", "gest", "hajar", "hann", "hund", "kaka", "kanten", "kassa", "kras", "lans", "leda", "lekt", "lila", "list", "litar", "lucka", "makar", "sats", "mint", "natt", "peta", "renas", "repa", "rider", "sagt", "sett", "sikt", "stam", "syra", "taget", "vaken", "valar", "vars", "vilt", "vinna" }; bool differs_at_one_letter(string const& word, string const& other) { // 1. Om word och other har olika storlek, returnera falskt if (word.size() == other.size()) { // 2. Hitta första positionen i word och other där bokstäverna // skiljer sig auto pos { mismatch(word.begin(), word.end(), other.begin()) }; if (pos.first != word.end()) { // 3. Sök från nästa position och framåt efter en ytterligare // skillnad i bokstäverna mellan word och other ++pos.first; ++pos.second; pos = mismatch(pos.first, word.end(), pos.second); // 4. Om inga fler skillnader hittas (d.v.s. att endast en skillnad // mellan word och other hittas) då returnerar funktionen sant return pos.first == word.end(); } } // 5. Returnera falskt i alla andra fall return false; } string get_synonym(string const& word) { // 1. hitta det första elementet i words där differs_at_one_letter // ger sant när den jämför med word auto it {find_if(words.begin(), words.end(), [&word](string const& str) { return differs_at_one_letter(word, str); })}; // 2. om inget synonym hittades returnera word if (it == words.end()) return word; // 3. om ett synonym hittades, returnera det return *it; } int main() { string word; cout << "Mata in ett ord: "; cin >> word; cout << get_synonym(word) << endl; } // mina bord är fina -> dina bord är dina // en massa med barn -> en kassa med bark // mitt barn sucka -> mint bark lucka // jag talar med en kund -> jag valar med en hund