Tento program vezme větu od uživatele a obrátí ji pomocí rekurze. Tento program nepoužívá řetězec k převrácení věty nebo uložení věty.
Abychom porozuměli tomuto příkladu, měli byste znát následující programovací témata C ++:
- Funkce C ++
- Typy uživatelsky definovaných funkcí v C ++
- C ++ rekurze
- C ++ if, if … else a Nested if … else
Příklad: Obrátit větu pomocí rekurze.
#include using namespace std; // function prototype void reverse(const string& a); int main() ( string str; cout << " Please enter a string " << endl; getline(cin, str); // function call reverse(str); return 0; ) // function definition void reverse(const string& str) ( // store the size of the string size_t numOfChars = str.size(); if(numOfChars == 1) ( cout << str << endl; ) else ( cout << str(numOfChars - 1); // function recursion reverse(str.substr(0, numOfChars - 1)); ) )
Výstup
Zadejte větu: skvělý program margorp emosewa
V tomto programu je uživatel vyzván k zadání řetězce, který je uložen v objektu řetězce str.
Potom reverse()
se volá funkce, která je rekurzivní funkcí.
Uvnitř této funkce ukládáme velikost vstupního řetězce do proměnné numOfChars.
V prvním volání funkce reverse()
vytiskne poslední znak řetězce s kódem:
cout << str(numOfChars - 1);
Nezapomeňte, že řetězce jsou ve skutečnosti pole znaků , takže každý jednotlivý znak řetězce může být reprezentován jako index pole řetězce str ().
Na dalším řádku se rekurzivní funkce nazývá:
reverse(str.substr(0, numOfChars - 1));
Zde substr()
dává řetězec až do druhého posledního znaku, který je znovu předán reverse()
funkci.
V dalším reverse()
volání se vytiskne druhý poslední znak, protože řetězec obsahuje o jeden znak méně než poslední. Poté je jeden znak z posledního znovu odříznut od řetězce a předán reverse()
funkci.
To trvá, dokud se délka řetězce nebude rovnat 1, když se vytiskne poslední znak (nebo první znak) a smyčka skončí.