Ú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
prvy
adruhy
typustd::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_triedeny
adruhy_triedeny
. - Pomocou funkcie
std::sort
z 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_anagramy
a na základe jej návratovej hodnoty vypíše, či sú zadané reťazce anagramy alebo nie.