To jest stara wersja strony!
Autor: Maciej Stefańczyk
Klasa string jest kontenerem przeznaczonym do przechowywania łańcuchów znaków. Stanowi pewnego rodzaju opakowanie dla tablic znaków znanych z C, zawiera także wiele funkcji przydatnych do operowania na napisach. Przy programowaniu obiektowym klasa string zastępuje używanie tabic znaków i biblioteki cstring.
Aby móc używac obiektów typu string należy dołączyć do programu odpowiedni nagłówek:
#include <string>
Podstawowe | |
---|---|
Konstruktor | Tworzy nowy obiekt |
operator= | Operator przypisania |
Iteratory | |
iterator begin(); const_iterator begin() const; | Zwraca iterator na pierwszy znak napisu |
iterator end(); const_iterator end() const; | Zwraca iterator wskazujący na miejsce za ostatnim znakiem |
reverse_iterator rbegin(); const_reverse_iterator rbegin() const; | Zwraca wsteczny iterator wskazujący na ostatni znak napisu |
reverse_iterator rend(); const_reverse_iterator rend() const; | Zwraca wsteczny iterator wskazujący na miejsce przed pierwszym znakiem |
Rozmiar | |
size_t size() const; | Zwraca ilość znaków w napisie (to samo co length()) |
size_t length() const; | Zwraca ilość znaków w napisie (to samo co size()) |
size_t max_size ( ) const; | Zwraca maksymalny dozwolony rozmiar napisu |
void resize ( size_t n, char c ); void resize ( size_t n ); | Zmienia rozmiar napisu (skraca lub wydłuża). Jeśli podany będzie dodatkowy argument c, po wydłużeniu napisu wolne miejsca zostaną wypełnione podanym znakiem. |
size_t capacity ( ) const; | Zwraca wielkość aktualnie zarezerwowanej dla napisu pamięci. capacity >= size. W razie potrzeby dodatkowa pamięć jest alokowana automatycznie. |
void reserve ( size_t res_arg=0 ); | Wymusza zarezerwowanie ustalonej pamięci dla napisu. Jeśli podany argument jest mniejszy od aktualnej długości napisu, ilość pamięci jest zmniejszana do wielkości gwarantującej przechowanie dotychczasowego napisu. |
void clear(); | Czyści napis |
bool empty ( ) const; | Sprawdza, czy napis jest pusty |
Dostęp do znaków | |
const char& operator[] ( size_t pos ) const; char& operator[] ( size_t pos ); | Zwraca znak na pozycji pos. |
const char& at ( size_t pos ) const; char& at ( size_t pos ); | Zwraca znak na pozycji pos. Działa podobnie do operatora [], z tym że funkcja at() wykonuje sprawdzenie zakresu i w wypadku jego przekroczenia rzuca wyjątek out_of_range. |
Modyfikacja | |
operator+= | Dopisuje znaki na końcu napisu |
append | Dopisuje znaki na końcu napisu |
void push_back ( char c ); | Dodaje znak c na koniec napisu |
assign | Zastępuje dotychczasowy napis nowym |
insert | Wstawia dodatkowe znaki do napisu |
erase | Usuwa znaki z napisu |
replace | Zmienia część napisu |
size_t copy ( char* s, size_t n, size_t pos = 0) const; | Kopiuje do tablicy s n znaków zaczynając od pozycji pos. Nie jest dopisywany znak '\0'. Odpowiednia ilość pamięci dla s powinna być przydzielona przed wywołaniem funkcji. |
void swap ( string& str ); | Zamienia zawartość aktualnego napisu z napisem str. |
Operacje dodatkowe | |
const char* c_str ( ) const; | Zwraca wskaźnik na tablicę znaków zakończoną zerem reprezentującą zawartość napisu. |
const char* data ( ) const; | Zwraca wskaźnik na wewnętrzną tablicę przechowującą znaki napisu. Łańsuch nie zawiera kończącego zera. |
find | Wyszukuje pierwsze wystąpienie znaku/ciągu w napisie |
rfind | Wyszukuje ostatnie wystąpienie znaku/ciągu w napisie |
find_first_of | Wyszukuje pierwsze wystąpienie jednego z podanych znaków |
find_last_of | Wyszukuje ostatnie wystąpienie jednego z podanych znaków |
find_first_not_of | Wyszukuje pierwsze wystąpienie znaku nie podanego jako argument |
find_last_not_of | Wyszukuje ostatnie wystąpienie znaku nie podanego jako argument |
string substr ( size_t pos = 0, size_t n = npos ) const; | Zwraca podciąg aktualnego napisu zaczynający się na pozycji pos i składający się maksymalnie z n znaków |
compare | Porównuje dwa stringi |
Istnieje kilka metod tworzenia obiektów klasy string.
explicit string ( );
Tworzy pusty napis.
string ( const string& str );
Kopiuje do nowego napisu zawartość już istniejącego.
string ( const string& str, size_t pos, size_t n = npos );
Tworzy nowy napis i kopiuje do niego podciąg napisu podanego jako argument. Kopiowana jest część zaczynająca się na pozycji pos i zawierająca conajwyżej n znaków (jeśli napis jest krótszy niż pos+n, kopiowane są znaki od pozycji pos do końca napisu).
string ( const char * s, size_t n );
Nowy napis jest tworzony poprzez kopiowanie n znaków z tablicy znaków wskazywanej przez s.
string ( const char * s );
Nowy napis jest tworzony poprzez skopiowanie łańcucha znaków zakończonego zerem wskazywanego przez s.
string ( size_t n, char c );
Tworzony jest napis zawierający n wystapień znaku c.
template<class InputIterator> string (InputIterator begin, InputIterator end);
Jeśli InputIterator jest typu całkowitego, jego argumenty są rzutowane na odpowiednie typy i wywoływany jest konstruktor wymieniony wyżej.
string(static_cast<size_t>(begin),static_cast<char>(end));
W przeciwnym wypadku argumenty są traktowane jak iteratory i napis jest tworzony przez skopiowanie do stringa wszystkich elementów poczynając od begin a kończąc na elemencie poprzedzającym end.
string& operator= ( const string& str ); string& operator= ( const char* s ); string& operator= ( char c );
Operator przypisania dla napisów.
W każdym przypadku zwracaną wartością jest *this.
string& operator+= ( const string& str ); string& operator+= ( const char* s ); string& operator+= ( char c );
Dopisuje na końcu napisu kopię danych podaną jako argument.
Rozszerzoną funkcjonalność oferuje funkcja append.
string& append ( const string& str );
Dopisuje na końcu napisu kopię podanego argumentu.
string& append ( const string& str, size_t pos, size_t n );
Dopisuje na końcu podciąg podanego argumentu zaczynający się na pozycji pos i składający się z n znaków (bądź mniej, jeśli napis się skończy wcześniej). Jeśli pos jest większy niż długość napisu zgłaszany jest wyjątek out_of_range
string& append ( const char * s, size_t n );
Dopisuje na końcu pierwsze n znaków z tablicy wskazywanej przez s.
string& append ( const char * s );
Dopisuje na końcu napis wskazywany przez s, kończący się znakiem '\0'.
string& append ( size_t n, char c );
Dopisuje na końcu n razy znak c.
template<class InputIterator> string& append (InputIterator first, InputIterator last);
Dopisuje na końcu wszystie znaki zaczynając od wskazywanego przez first a kończąc na znaku poprzedzającym last.
string& assign ( const string& str ); string& assign ( const string& str, size_t pos, size_t n ); string& assign ( const char* s, size_t n ); string& assign ( const char* s ); string& assign ( size_t n, char c ); template <class InputIterator> string& assign ( InputIterator first, InputIterator last );
Działanie assign polega na przypisaniu do napisu zawartości podanej jako argument. Argumenty interpretowane są identycznie jak w funkcji append.
string& insert ( size_t pos1, const string& str ); Wstawia cały napis //str// na pozycji //pos1//. <code cpp>string& insert ( size_t pos1, const string& str, size_t pos2, size_t n );
Wstawia do napisu na pozycji pos1 podciąg napisu str zaczynający się na pozycji pos2 i zawierający do n znaków.
string& insert ( size_t pos1, const char * s, size_t n );
Wstawia na pozycji pos1 pierwsze n znaków z tablicy s.
string& insert ( size_t pos1, const char * s );
Wstawia na pozycji pos1 cały napis wskazywany przez s (napis musi być zakończony znakiem '\0').
string& insert ( size_t pos1, size_t n, char c );
Wstawia na pozycji pos1 n znaków c.
iterator insert ( iterator p, char c );
Wstawia na pozycji wskazywanej przez iterator p znak c. Zwracany jest iterator na wstawiony znak.
void insert ( iterator p, size_t n, char c );
Wstawia na pozycji wskazywanej przez iterator p n znaków c.
template<class InputIterator> void insert (iterator p, InputIterator first, InputIterator last);
Wstawia na pozycji wskazywanej przez iterator p wszystkie znaki zaczynając od wskazywanego przez first, kończąc na znaku poprzedzającym last.
string& erase ( size_t pos = 0, size_t n = npos );
Usuwa z napisu n znaków zaczynając od tego na pozycji pos. Jeśli n większe od długości napisu, usuwane są znaki do końca napisu.
iterator erase ( iterator p );
Usuwa jeden znak, wskazywany przez iterator p.
iterator erase ( iterator first, iterator last );
Usuwa znaki zaczynając od tego wskazywanego przez first a kończac na poprzedzającym last.
Zamienia część napisu na inną, podaną jako argument. Większość funkcji występuje w dwóch wersjach - pierwsza z nich określa fragment napisu do zmiany poprzez podanie pozycji pierwszego znaku pos1 oraz długości n1, druga określa go poprzez podanie iteratorów i1 i i2.
string& replace ( size_t pos1, size_t n1, const string& str ); string& replace ( iterator i1, iterator i2, const string& str );
Wybrany fragment jest zamieniany na cały napis str.
string& replace ( size_t pos1, size_t n1, const string& str, size_t pos2, size_t n2 );
Wybrany fragment jest zamieniany na podciąg napisu str zaczynający się na pozycji pos2 i zawierający do n2 znaków.
string& replace ( size_t pos1, size_t n1, const char * s, size_t n2 ); string& replace ( iterator i1, iterator i2, const char * s, size_t n2 );
Wybrany fragment jest zamieniany na pierwsze n2 znaków z tablicy s.
string& replace ( size_t pos1, size_t n1, const char * s ); string& replace ( iterator i1, iterator i2, const char * s );
Wybrany fragment jest zamieniany na napis wskazywany przez s (zakończony znakiem '\0').
string& replace ( size_t pos1, size_t n1, size_t n2, char c ); string& replace ( iterator i1, iterator i2, size_t n2, char c );
Wybrany fragment jest zamieniany na n2 wystąpień znaku c.
template<class InputIterator> string& replace (iterator i1, iterator i2, InputIterator j1, InputIterator j2);
Wybrany fragment jest zamieniany na znaki znajdujące się pomiedzy iteratorami j1 i j2.
operacja | C | C++ |
---|---|---|
Porównanie zawartości | strcmp(s1, s2) | s1 == s2 (!=, <, > etc) / s1.compare(s2, …) |
Dopisanie na koniec | strcat(s1, „…”) | s1 += „…” / s1.append(„…”, …) |
Kopiowanie zawartości | strcpy(s1, s2) | s1 = s2 / s1.assign(s2) |
Długość | strlen(s1) | s1.size() |
Wyszukiwanie napisu | strstr(s1, „napis”) | s1.find(„napis”) |
Wyszukiwanie jednego ze znaków | strspn(s1, „abc”) | s1.find_first_of(„abc”) |
Podział na podnapisy | strtok(s1, „ ”) | brak |