Strony

sobota, 14 kwietnia 2018

Odwracanie łańcucha znaków string [C++]

Witam was.
W tym poście zajmiemy się problemem odwracania napisu zapisanego w zmiennej typu string. Wszystkie przykłady będą realizowane w języku C++.
Po krotce postaram się przedstawić 3 sposoby odwracania napisu.


Sposób pierwszy

Najprostszym z możliwych sposobów jest, stworzyć funkcję zwracającą typ string, ponadto funkcja będzie przyjmować jeden argument. Tym argumentem jest właśnie nasz napis do odwrócenia.
Następnie w funkcji tworzymy pusty string. Zmienną napisową typu string można zmierzyć przy pomocy metody length().
Następnie w pętli idąc od końca stringa str dostajemy się do pojedynczych znaków i zapisujemy je do zmiennej Rstr, którą na końcu zwracamy.
Nasza funkcja nie robi nic innego jak przepisuje jednego stringa do drugiego znak po znaku tylko idąc od tyłu tego pierwszego.
Poniższy kod jest właśnie realizacją tego pomysłu:


Sposób drugi


Oczywiście można to zrobić lepiej, bez zbędnego zwracania, zamiast przekazywać do funkcji zmienną jako kopie, lepiej przekazać ją jako referencje.
Pomysł jest bardzo prosty, zmieniamy między sobą elementy z początku i końca stringa. Wykonujemy tą operacje dotąd aż ten z początku ma niższy index niż ten z końca. Nie musimy się przejmować przypadkiem kiedy długość napisu jest nie parzysta ponieważ nie ma potrzeby zamiany środkowej wartości z samym sobą. Dzięki temu pomysłowi ilość przestawień jest równa połowie długości napisu. Zamianę dwóch zmiennych najoptymalniej jest wykonać przy pomocy gotowej funkcji swap().


Sposób trzeci


C++ to nie Python gdzie mamy w zanadrzu pełno gotowych funkcji ułatwiających życie.
Jednak okazuje się, że istnieje funkcja w bibliotece algorithm umożliwiająca odwracanie stringów. Funkcja ta nazywa się reverse i przyjmuje dwa argumenty, pierwszy to iterator na początek zaś drugi to iterator na koniec.
Poniższy program ilustruje jej działanie:



Brak komentarzy:

Prześlij komentarz