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