Spis treści:

Wstęp.

Witam. Standardowa Biblioteka Szablonów C++ (STL) oferuje nam typ string, posiadający wiele przydatnych metod, dzięki którym będziemy mogli czynić przeróżne cuda z naszym tekstem. Ale po kolei. W STL zdefiniowany jest szablon klasy basic_string, którego argumentem jest typ znaków, jaki będzie on przechowywał – możemy więc posiadać string, w którym znaki są typu char (8 bitów), typu wide char (16 bitów) lub innego. Szablon ten zawiera w sobie wiele ciekawych i przydatnych metod, które dają duże możliwości w manipulowani stringami. Zdefiniowanych zostało też kilka operatorów, aby praca z nimi była wygodniejsza.

Należy pamiętać, że tych stringów nie wolno mylić ze stringami, które są zakończone znakiem o kodzie 0 (NULL) – w stringach z STL zapamiętywana jest ilość aktualnie przechowywanych znaków, więc znak NULL nie jest potrzebny.

Typ, jakim będziemy się posługiwać, to wyspecjalizowany typ szablonu basic_string, w którym znaki są typu char:

Do użytku oddany jest także typ, w którym znaki są typu wide char:

Te typy mają także swoje własne metody oraz operatory, przydatne podczas pracy na nich.

Aby móc korzystać z tych dobrodziejstw, musimy włączyć do naszego programu nagłówek string:

Typy te znajdują się w przestrzeni nazw std, więc przy definiowaniu zmiennych należy się posłużyć odpowiednim przedrostkiem:

Dla wygody, na początku programu dodamy dyrektywę karzącą domyślnie dodawać przedrostek std:

 

To tyle słowem wstępu ;]

>>Spis treści<<

Konstruowanie stringów.

String oferuje nam kilka konstruktorów (po dokładniejszy opis odsyłam do MSDN):

_Ptr – ciąg znaków zakończonych znakiem NULL (argumentem nie może być sama wartość NULL)
_Count – liczba znaków, jakimi string ma być zainicjalizowany (pobierane z argumentów _Ptr oraz _Right)
_Right – string, którego znakami ma być zainicjalizowany nasz string
_Roff – pozycja w _Right, od której należy pobrać _Count znaków
_Ch – znak, jakim ma być wypełniony string

Kilka przykładów:

Pytanie: co zawiera w sobie po utworzeniu string s4? Pustą wartość? Nie, gdyż domyślnie w trzeciem konstruktorze _Count = npos, które jest równe -1 i oznacza albo „nie znaleziono” lub „wszystkie znaki”, więc s4 zostanie zainicjalizowany wszystkimi znakami ze stringu s1.

>>Spis treści<<

Iteratory.

Iteratory zostały stworzone specjalnie na potrzeby biblioteki STL. Można je przesuwać jak wskaźniki itp. Do wyboru mamy kilka iteratorów, jak np. iterator oraz reverse_iterator – pierwszy z nich pozwala odczytywać i modyfikować elementy wektora, a drugi pozwala na to samo, tylko, że w odwróconym wektorze. Wartość wskazywanego elementu pozyskujemy za pomocą operatora wyłuskania (*). Występują także wersje iteratorów, które mogą jedynie odczytywać wartości – const_iterator oraz const_reverse_iterator. Iteratory definiujemy w następujący sposób:

Użycie:

Istnieje wiele funkcji, które zwracają nam pozycję w stringu właśnie za pomocą iteratorów, jak np. begin().

>>Spis treści<<

Operatory stringów.

Do wykorzystania mamy kilka operatorów:

= służy do przypisania stringowi nowej wartości:

+= operator, za pomocą którego doklejamy do stringu nowy łańcuch znaków:

[] operator, za pomocą którego odwołujemy się do poszczególnych znaków w stringu (są one numerowane od 0!). Uwaga: skutki podania nieprawidłowego indeksu (mniejszego od 0 bądź większego od maksymalnego) są niezdefiniowane, więc w razie niepewności należy stosować metodę at(), jednakże operator [] jest szybszy w działaniu od tejże metody.

!= sprawdza, czy string po prawej stronie operatora jest różny od tego z lewej strony. Uwaga: brana jest pod uwagę wielkość liter!

== sprawdza, czy porównywane stringi są takie same. Uwaga: brana jest pod uwagę wielkość liter!

< porównuje dwa stringi i zwraca prawdę, jeżeli string z lewej strony jest „mniejszy”:

Zobaczy komunikat dwa razy. Sprawdzane są tutaj kolejne znaki, a mniejszy jest ten znak, którego kod ASCII jest mniejszy, czyli porównując 'A’ oraz 'a’ wyjdzie, że 'A’ jest mniejsze ;] Poza tym, jeżeli string pierwszy ma taki sam człon jak drugi, ale jest od niego krótszy, to także jest on mniejszy.

> jak powyżej, ale tym razem prawda jest zwracana, jeżeli pierwszy string jest “większy”.

<= sprawdza, czy string z prawej strony jest mniejszy bądź równy temu z prawej strony operatora.

>= testuje, czy prawy string jest większy bądź równy od lewego.

<< wstawia string do strumienia:

>> wyjmuje dane ze strumienia i przypisuje je do stringu:

+ operator ten łączy ze sobą dwa stringi:

>>Spis treści<<

Metody stringów.

Do pracy na stringach mamy kilkanaście ciekawych metod i po kilka ich odmian. Oto one:

append
Funkcja ta dodaje do końca stringu inny:

Parametry:

_Ptr – string zakończony znakiem NULL (tak zwany C-string),
_Count – określa, ile znaków ma zostać dodanych,
_Str – string, który ma zostać dodany,
_Off – wyznacza początek pod-stringu z _Str, który ma zostać dołączony,
_Ch – znak, jaki ma być dodany _Count razy,
_First i _Last – wyznaczają początek i koniec pod-stringu danego stringu, który ma zostać dodany.

Przykłady:

—Spis metod—

assign

Przypisuje stringowi nową wartość:

Parametry:

_Ptr – przypisuje string zakończony znakiem NULL (tak zwany C-string),
_Count – określa, ile znaków ma zostać przypisanych,
_Str – string, który ma zostać przypisany,
_Off – wyznacza początek pod-stringu z _Str, który ma zostać przypisany,
_Ch – znak, jaki ma być przypisany _Count razy,
_First i _Last – wyznaczają początek i koniec pod-stringu danego stringu, który ma zostać przypisany.

Przykłady:

—Spis metod—

at

Zwraca referencję do znaku o indeksie loc:

Kolejne znaki numerowane są od 0 do n – 1, gdzie n to ilość znaków w stringu.

Jedynym parametrem jest właśnie indeks znaku, który chcemy otrzymać. Metoda ta jest wolniejsza od operatora [], ale uwaga: używanie tej metody jest bezpieczniejsze od używania operatora [], gdyż sprawdza ona, czy indeks jest nieprawidłowy – czy nie jest mniejszy od zera bądź większy od maksymalnego indeksu, jeżeli tak będzie, zostanie wywołany wyjątek out_of_range.

Przykład:

—Spis metod—

begin

Zwraca iterator do pierwszego znaku stringu (bądź do miejsca zaraz za końcem stringu, jeżeli ten jest pust):

Przykład:

—Spis metod—

c_str

Zwraca wskaźnik na zakończony znakiem NULL string (w stylu C). Nie można modyfikować tak przesłanego stringu, więc można go przesyłać jedynie do funkcji, które jako argumenty przyjmują const *char:

Przykład:

—Spis metod—

capacity

Zwraca maksymalną ilość elementów, jakie mogą być przechowywane bez konieczności zwiększanie rozmiaru zaalokowanej pamięci dla stringu:

Przykład:

—Spis metod—

clear

Usuwa wszystkie elementy ze stringu:

Przykład:

—Spis metod—

compare

Sprawdza, czy porównywane stringi są takie same, bądź czy jeden z nich nie jest większy/mniejszy od drugiego. Brana jest pod uwagę wielkość liter. Uwaga: małe litery są „większe” od wielkich, ponieważ ich kody ASCII są od większe. Zwracana wartość jest mniejsza od zera, jeżeli przesłany w parametrze string jest większy, zero, jeśli stringi są takie same oraz większa od zera, jeśli przesłany string jest mniejszy.

Parametry:

_Str – string, który ma zostać przyrównany,
_Pos1 – indeks znaku w stringu, na rzecz którego funkcja została wywołana, od którego ma zostać rozpoczęte porównywanie,
_Num1 – maksymalna ilość znaków ze stringu, na rzecz którego została wywołana funkcja, które mają zostać porównane,
_Num2 – maksymalna ilość znaków z przyrównywanego stringu, które mają zostać porównane
_Off – pozycja znaku w porównywanym stringu, od którego ma zostać rozpoczęte porównywanie,
_Count – maksymalna ilość znaków ze stringu porównywanego jakie mają zostać porównane,
_Ptr – string w stylu C, który ma zostać porównany.

Przykład:

—Spis metod—

// z czasem będą się pojawiać nowy wpisy

>>Spis treści<<

Odsyłacze.

>>Spis treści<<

Autor: Iskar