Úloha 1.4
Napíšte program v jazyku C++ použitím štandardu C++17, ktorý realizuje nasledovnú činnosť.
Program načíta reťazec zo štandardného vstupu a zistí, či je tento reťazec palindróm (t.j. číta sa rovnako spredu aj
zozadu). Implementujte funkciu bool je_palindrom(const std::string& text)
, ktorá vráti hodnotu true
, ak je reťazec
palindróm, 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:
radar
- Výstup:
Reťazec 'radar' je palindróm.
Príklad 2
- Vstup:
programovanie
- Výstup:
Reťazec 'programovanie' nie je palindróm.
Rozbaľ pre ukážku riešenia
#include <iostream>
bool je_palindrom(const char* text) {
int dlzka = 0;
while (text[dlzka] != '\0') {
++dlzka;
}
for (int i = 0; i < dlzka / 2; ++i) {
if (text[i] != text[dlzka - 1 - i]) {
return false;
}
}
return true;
}
int main() {
const int MAX_DLZKA = 100;
char text[MAX_DLZKA];
std::cout << "Zadajte reťazec: ";
std::cin.getline(text, MAX_DLZKA);
if (je_palindrom(text)) {
std::cout << "Reťazec '" << text << "' je palindróm." << std::endl;
} else {
std::cout << "Reťazec '" << text << "' nie je palindróm." << std::endl;
}
return 0;
}
Vysvetlenie
Funkcia je_palindrom
:
- Funkcia prijíma ukazovateľ na znakové pole (
const char* text
). - Výpočet dĺžky reťazca: Pomocou cyklu
while
sa zistí dĺžka reťazca tým, že sa iteruje až po nulový znak ('\0'
). - Kontrola palindrómu: V cykle
for
sa porovnávajú znaky od začiatku a konca reťazca smerom k stredu. Ak sa nájde dvojica znakov, ktoré sa nerovnajú, funkcia vrátifalse
. Ak sú všetky takéto dvojice rovnaké, funkcia vrátitrue
.
Funkcia main
:
- Definícia konštanty:
MAX_DLZKA
je konštanta určujúca maximálnu dĺžku reťazca, ktorú program dokáže spracovať. - Načítanie reťazca: Používa sa funkcia
std::cin.getline
na načítanie celého riadku textu vrátane medzier. - Volanie funkcie
je_palindrom
: Na základe návratovej hodnoty tejto funkcie program vypíše, či je zadaný reťazec palindróm alebo nie.
Alternatívne, viac c++ riešenie
#include <iostream>
#include <string>
#include <algorithm>
bool je_palindrom(const std::string& text) {
std::string reversed_text = text;
std::reverse(reversed_text.begin(), reversed_text.end());
return text == reversed_text;
}
int main() {
std::string text;
std::cout << "Zadajte reťazec: ";
std::getline(std::cin, text);
if (je_palindrom(text)) {
std::cout << "Reťazec '" << text << "' je palindróm." << std::endl;
} else {
std::cout << "Reťazec '" << text << "' nie je palindróm." << std::endl;
}
return 0;
}
Vysvetlenie
Funkcia je_palindrom
:
- Funkcia prijíma reťazec
text
typustd::string
. - Vytvorí kópiu tohto reťazca s názvom
reversed_text
. - Pomocou funkcie
std::reverse
z knižnice<algorithm>
obráti obsah reťazcareversed_text
. - Porovná pôvodný reťazec
text
s obráteným reťazcomreversed_text
. Ak sú rovnaké, funkcia vrátitrue
, inak vrátifalse
.
Funkcia main
:
- Načíta reťazec od používateľa pomocou
std::getline
, čo umožňuje načítať celý riadok vrátane medzier. - Volá funkciu
je_palindrom
a na základe jej návratovej hodnoty vypíše, či je zadaný reťazec palindróm alebo nie.
Tento program rozlišuje veľké a malé písmená a berie do úvahy aj medzery a interpunkčné znamienka. Ak chcete, aby program ignoroval veľkosť písmen a nealfanumerické znaky, môžete pred porovnávaním reťazec pretransformovať na malé písmená a odstrániť nealfanumerické znaky.