Przeczytaj
Na łańcuchach znaków operujemy, sprawdzając, czy podane słowa są palindromami lub anagramami. Używamy ich również w niektórych szyfrach, takich jak na przykład szyfr Cezara.
Biblioteka string
Aby stworzyć łańcuch string
oraz skorzystać z funkcji opisanych w tej lekcji, musimy najpierw dołączyć do programu bibliotekę string
. Są w niej zawarte różne funkcje umożliwiające wykonywanie operacji na łańcuchach znaków.
Bibliotekę string
dołączymy, wpisując następujący kod:
Wykorzystamy również przestrzeń nazw:
Sposoby pobierania tekstu
Załóżmy, że chcemy pobrać od użytkownika jego imię i nazwisko. Możemy to zrobić, używając predefiniowanego strumienia wejścia cin
.
Prawdopodobnie początkowo zapiszemy instrukcje w taki sposób:
Pozwoli to co prawda przyjąć dane od użytkownika, ale może się zdarzyć, że nie zostaną one wczytane w całości. Jeśli pomiędzy imieniem i nazwiskiem pojawi się odstęp (spacja), pobrane zostanie jedynie imię. Wynika to z faktu, że strumień cin
traktuje wszystkie białe znakibiałe znaki jako koniec wpisywanego ciągu.
Istnieją dwa rozwiązania tego problemu. Pierwszym z nich byłoby poproszenie użytkownika o wpisanie najpierw imienia, potem nazwiska:
Możemy również pobrać dane za pomocą funkcji getline()
. W tym przypadku kod wyglądałby następująco:
W funkcji getline()
pierwszym argumentem jest strumień, za pomocą którego chcemy pobrać dane, a drugim string
– do którego chcemy zapisać ciąg znaków. Ponieważ funkcja getline()
nie traktuje spacji jako końca strumienia danych, nadaje się do pobierania całych wierszy tekstu, w przypadku których wyrazy rozdzielone są spacjami.
Funkcje length()
i size()
Są to metody, które zwracają informację o długości łańcucha znaków.
Zmienne łańcuchowe typu string
, w przeciwieństwie do zwykłych tablic, dają nam możliwość sprawdzenia liczby znaków składających się na ciągi. Jest to szczególnie przydatne w sytuacjach, w których np. mamy zliczyć, ile razy dany znak występuje w ciągu. Załóżmy, że chcemy policzyć, ile zer pojawiło się w ciągu zer i jedynek. Zrobimy to w następujący sposób:
Jak widać, metody te mogą posłużyć za wartość, której użyjemy do określenia warunku powtórzenia pętli. Użyliśmy tutaj metody size()
, ale równie dobrze w jej miejsce moglibyśmy wstawić length()
. Nie ma między nimi większej różnicy, a efekt zastosowania jest ten sam.
Co prawda w pokazanym przykładzie moglibyśmy z łatwością sami policzyć, z ilu znaków składa się łańcuch – nie jest to duża ani zmieniająca się wartość. W przypadku, gdy łańcuch znaków jest o wiele dłuższy lub jego długość nie jest stała, wykonanie tej samej operacji bez użycia wspomnianych metod byłoby trudne.
W zadaniach maturalnych często wymaga się, by zdający wykonali operacje na dużej liczbie ciągów znaków zapisanych w pliku tekstowym. Oznacza to konieczność wielokrotnego wczytania każdego ciągu do łańcucha znaków o tej samej nazwie. Ponieważ są one różnej długości, metody length()
oraz size()
, okazują się niezwykle przydatne.
Zmiana zawartości łańcucha znaków
Każdy znak w łańcuchu znaków ma swój indeks, który jest liczbą naturalną. Numerację zaczynamy od 0
. Dla łańcucha znaków test
indeks pierwszej litery t
to 0
, a indeks litery s
to 2
.
Załóżmy, że chcemy znaleźć, a następnie wypisać pozycję ciągu znaków test
w łańcuchu znaków To jest wpis testowy.
Służy do tego funkcja find()
, której nazwę łatwo jest zapamiętać, ponieważ znajduje ona (ang. find) pozycję podanego ciągu znaków.
Gdy znajdziemy już pozycję wspomnianego ciągu znaków, możemy jej użyć w kolejnej funkcji, aby zamienić odszukany wyraz na inny. Skorzystamy przy tym z funkcji replace()
.
Załóżmy, że w łańcuchu To jest wpis testowy
chcemy zmienić wyraz testowy
na nowy
. Aby to zrobić, wpiszemy następującą linię kodu:
Zauważmy, że literę n
wpisaliśmy w cudzysłowie, nie zaś między apostrofami tak jak wcześniej. Wynika to z faktu, że trzeci argument funkcji replace()
jest typu string
. Apostrofy służą zaś do oznaczania pojedynczego znaku, czyli typu char
.
Po zakończeniu działania funkcji zawartość łańcucha zmieni się z To jest wpis testowy
na To jest wpis nowy
.
Słownik
każdy znak, który jest niewidoczny; przykładami białych znaków są spacja, znak tabulacji, znak końca linii lub dowolny inny znak, który nie ma kształtu na ekranie