Przeczytaj
Jak sprawdzić, czy dany ciąg liter lub cyfr jest palindromempalindromem, czyli czy wyrażenie odczytywane w obie strony brzmi tak samo?
Będziemy zajmować się ciągami znaków, a zatem skorzystamy z biblioteki:
Zapiszemy również wykorzystanie przestrzeni nazw:
Dzięki wykorzystaniu biblioteki <string> możemy wykonywać różne działania na ciągach znaków, np. porównywanie, dodawanie kilku łańcuchów do siebie, wyszukanie konkretnego znaku w łańcuchu.
Aby zadeklarować ciąg znaków, używamy string nazwa_zmiennej.
Czasami kompilatory dołączają niektóre biblioteki automatycznie, bez potrzeby deklaracji ich w kodzie. Np. po dołączeniu <iostream> może się okazać, że już jest w niej zawarty nagłówek <string>. Jednak, dla pewności, w implementacji należy dodawać niezbędne biblioteki. Program bowiem może nie działać przy użyciu innego kompilatora lub w innej wersji kompilatora przez ciebie używanego.
Odwracanie wyrażenia w łańcuchu znaków
Załóżmy, że chcemy sprawdzić, czy słowo „kajak” jest palindromem. Jednym ze sposobów badania ciągu znaków będzie odwrócenie go i porównanie z oryginałem.
Zaczniemy od zdefiniowania łańcucha znaków string, któremu nadamy nazwę tekst. Przypiszemy mu wartość kajak. Utworzymy również pusty łańcuch odwrot. Znajdzie się w nim sprawdzane wyrażenie, zapisane wspak.
Następnie użyjemy pętli for w celu wprowadzenia do zmiennej odwrot znaków łańcucha tekst zapisanych w odwrotnej kolejności.
Licznikowi w pętli for (zmiennej i) przypiszemy wartość ostatniego indeksu łańcucha znaków tekst. Wynosi ona tekst.size() - 1, ponieważ indeksowanie łańcucha zaczynamy od liczby 0 (słowo kajak składa się z pięciu znaków ponumerowanych od 0 do 4). W każdym przejściu pętli będziemy dekrementowaćdekrementować zmienną i, aż do momentu, gdy osiągnie ona wartość 0 (czyli taką samą, jak indeks pierwszego znaku łańcucha tekstowego).
Poszczególne elementy łańcucha znaków odwrot wprowadzamy za pomocą operatora przypisania +=.
Gdy gotowe są już dwa łańcuchy znaków – jeden ze sprawdzanym wyrażeniem, a drugi z jego lustrzanym odbiciem – możemy porównać je za pomocą instrukcji warunkowej if. Jeśli okażą się one identyczne, mamy do czynienia z palindromem.
Po zbadaniu słowa „kajak” otrzymalibyśmy odpowiedź Palindrom.
Porównywanie znaków o skrajnych indeksach
Inna metoda badania, czy wyrażenie jest palindromem, polega na porównywaniu jego skrajnych znaków. Ponieważ palindrom brzmi tak samo czytany w obie strony, to pierwszy znak jest taki sam jak ostatni, drugi taki sam jak przedostatni itd.
Znowu zaczniemy od zdefiniowania wyrażenia, które chcemy zbadać. Tworzymy łańcuch znaków string o nazwie tekst i wpisujemy do niego słowo rower. Definiujemy również zmienną typu logicznego (bool):
Zmienną logiczną nazwaliśmy palindrom – przechowywana w niej będzie informacja o tym, czy wyrażenie jest palindromem. Wstępnie nadaliśmy jej wartość true. W przypadku, gdy znaki o skrajnych indeksach nie będą sobie równe, zmienimy ją na false. Innymi słowy, początkowo zakładamy, że sprawdzany tekst jest palindromem, a następnie weryfikujemy, czy mieliśmy rację.
Następnie użyjemy pętli for. Posłuży ona do badania znaków na obu końcach wyrażenia. Zadeklarujemy dwie zmienne iteracyjne (licznikowe). Początkową wartością jednej z nich będzie indeks pierwszego znaku (0), natomiast wartość drugiej wstępnie ustalimy jako tekst.size() - 1 (odpowiada to indeksowi ostatniego znaku wyrażenia).
Pętla będzie wykonywana dopóty, dopóki prawdziwy będzie warunek i < tekst.size() / 2. Znaki sprawdzamy parami, a zatem liczba powtórzeń pętli odpowiada połowie długości kontrolowanego łańcucha. Zmienna palindrom przyjmie wartość zależną od tego, czy mamy do czynienie z palindromem, czy też nie.
Zmienne logiczne mogą służyć za wyrażenie sterujące działaniem funkcji warunkowej if. Uzupełnimy więc kod:
Po zbadaniu słowa „rower” otrzymamy odpowiedź: To nie jest palindrom.
Słownik
zmniejszenie wartości zmiennej o jeden
słowo lub wyrażenie, które brzmi tak samo odczytywane zarówno od strony lewej do prawej, jak i w odwrotnym kierunku