Program v C ++ na obrátenie vety pomocou rekurzie

Tento program vezme vetu od používateľa a obráti ju pomocou rekurzie. Tento program nepoužíva reťazec na obrátenie vety alebo na uloženie vety.

Aby ste pochopili tento príklad, mali by ste mať znalosti nasledujúcich programovacích tém C ++:

  • Funkcie C ++
  • Typy funkcií definovaných používateľom v jazyku C ++
  • C ++ rekurzia
  • C ++ ak, ak … inak a Vnorené, ak … inak

Príklad: Obrátenie vety pomocou rekurzie.

 #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ýkon

 Zadajte vetu: úžasný program margorp emosewa 

V tomto programe je užívateľ vyzvaný na zadanie reťazca, ktorý je uložený v objekte reťazca str.

Potom reverse()sa volá funkcia, ktorá je rekurzívnou funkciou.

Vo vnútri tejto funkcie ukladáme veľkosť vstupného reťazca do premennej numOfChars.

Pri prvom volaní funkcie reverse()vytlačí posledný znak reťazca s kódom:

 cout << str(numOfChars - 1);

Pamätajte, že reťazce sú v skutočnosti polia znakov , takže každý jednotlivý znak reťazca môže byť reprezentovaný ako index poľa reťazcov str ().

V ďalšom riadku sa rekurzívna funkcia nazýva:

 reverse(str.substr(0, numOfChars - 1));

Tu substr()dáva reťazec až druhému poslednému znaku, ktorý sa znova odovzdá reverse()funkcii.

Pri nasledujúcom reverse()hovore sa vytlačí druhý posledný znak, pretože reťazec obsahuje o jeden znak menej ako posledný. Potom sa jeden znak z posledného znova odreže z reťazca a odovzdá sa reverse()funkcii.

To trvá, kým sa dĺžka reťazca nebude rovnať 1, keď sa vytlačí posledný znak (alebo prvý znak) a slučka sa skončí.

Zaujímavé články...