Úloha 1.5
Napíšte program v jazyku C++ použitím štandardu C++17, ktorý realizuje nasledovnú činnosť.
Program načíta dva reťazce zo štandardného vstupu a zistí, či sú tieto reťazce anagramy (t.j. obsahujú rovnaké znaky v
rovnakom počte, ale v rôznom poradí). Implementujte funkciu
bool su_anagramy(const std::string& prvy, const std::string& druhy), ktorá vráti hodnotu true, ak sú reťazce
anagramy, inak vráti false. V programe použite vhodné konštanty tam, kde je to potrebné.
Príklady vstupov / výstupov programu
Príklad 1
- Vstup:
listen silent - Výstup:
Reťazce 'listen' a 'silent' sú anagramy.
Príklad 2
- Vstup:
hello world - Výstup:
Reťazce 'hello' a 'world' nie sú anagramy.
Rozbaľ pre ukážku riešenia
#include <iostream>
#include <string>
#include <algorithm>
bool su_anagramy(const std::string& prvy, const std::string& druhy) {
if (prvy.length() != druhy.length()) {
return false;
}
std::string prvy_triedeny = prvy;
std::string druhy_triedeny = druhy;
std::sort(prvy_triedeny.begin(), prvy_triedeny.end());
std::sort(druhy_triedeny.begin(), druhy_triedeny.end());
return prvy_triedeny == druhy_triedeny;
}
int main() {
std::string prvy_retazec, druhy_retazec;
std::cout << "Zadajte prvý reťazec: ";
std::getline(std::cin, prvy_retazec);
std::cout << "Zadajte druhý reťazec: ";
std::getline(std::cin, druhy_retazec);
if (su_anagramy(prvy_retazec, druhy_retazec)) {
std::cout << "Reťazce '" << prvy_retazec << "' a '" << druhy_retazec << "' sú anagramy." << std::endl;
} else {
std::cout << "Reťazce '" << prvy_retazec << "' a '" << druhy_retazec << "' nie sú anagramy." << std::endl;
}
return 0;
}Vysvetlenie
Funkcia su_anagramy:
- Funkcia prijíma dva reťazce
prvyadruhytypustd::string. - Najprv skontroluje, či majú oba reťazce rovnakú dĺžku. Ak nie, vráti
false, pretože reťazce rôznej dĺžky nemôžu byť anagramy. - Vytvorí kópie oboch reťazcov s názvami
prvy_triedenyadruhy_triedeny. - Pomocou funkcie
std::sortz knižnice<algorithm>zotriedi znaky v oboch reťazcoch. - Porovná zotriedené reťazce; ak sú rovnaké, vráti
true, inak vrátifalse.
Funkcia main:
- Načíta dva reťazce od používateľa pomocou
std::getline, čo umožňuje načítať celé riadky vrátane medzier. - Volá funkciu
su_anagramya na základe jej návratovej hodnoty vypíše, či sú zadané reťazce anagramy alebo nie.