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