Narzędzia użytkownika

Narzędzia witryny


opis_kontenera:string

String

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>

Metody klasy string

Spis

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

Konstruktory

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.

Przypisanie

string& operator= ( const string& str );
string& operator= ( const char* s );
string& operator= ( char c );

Operator przypisania dla napisów.

  • str - obiekt klasy string
  • s - łańcuch znaków zakończony zerem
  • c - po przypisaniu zawartość napisu stanowi pojedynczy znak

W każdym przypadku zwracaną wartością jest *this.

Modyfikacja

operator +=

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.

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.

assign

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.

insert

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.

erase

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.

replace

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.

Operacje dodatkowe

find

Do wyszukiwania podciągów w napisie służą dwie grupy funkcji. Pierwsza z nich wyszukuje cały napis podany jako argument, druga służy do wyszukiwania wystąpień dowolnego znaku z podanego napisu.

size_t find ( const string& str, size_t pos = 0 ) const;
size_t find ( const char* s, size_t pos, size_t n ) const;
size_t find ( const char* s, size_t pos = 0 ) const;
size_t find ( char c, size_t pos = 0 ) const;

Wyszukaj pierwsze wystąpienie podanego ciągu w napisie. W czasie wyszukiwania w bieżącym napisie brane pod uwagę są tylko znaki od pozycji pos. Jeśli został użyty parametr n, oznacza on liczbę znaków w tablicy wskazywanej przez s, w przeciwnym wypadku s powinno wskazywać na napis zakończony zerem.

W celu wyszukania ostatniego wystąpienia danego ciągu należy użyć funkcji rfind o identycznej składni.

size_t find_first_of ( const string& str, size_t pos = 0 ) const;
size_t find_first_of ( const char* s, size_t pos, size_t n ) const;
size_t find_first_of ( const char* s, size_t pos = 0 ) const;
size_t find_first_of ( char c, size_t pos = 0 ) const;

Wyszukaj pierwsze wystąpienie dowolnego znaku znajdującego się w podanym ciągu. Parametry mają takie samo znaczenie jak przy funkcji find.

Pozostałe 3 wersje tej funkcji to:

  • find_last_of - wyszukuje ostatnie wystąpienie dowolnego znaku z podanego ciągu
  • find_first_not_of - wyszukuje pierwszy znak nie będący fragmentem podanego ciągu
  • find_last_not_of - jw, z tym że wyszukuje ostatni taki znak

compare

int compare ( const string& str ) const;
int compare ( const char* s ) const;

Porównuje cały napis z podanym argumentem. Równoważne z

*this == str;
*this == s;
int compare ( size_t pos1, size_t n1, const string& str ) const;
int compare ( size_t pos1, size_t n1, const char* s) const;

Porównuje napis podany jako argument z podciągiem aktualnego napisu złożonego z n1 znaków zaczynającym się na pozycji pos1. Równowazne z

(*this).substr(pos1, n1) == str;
(*this).substr(pos1, n1) == s;
int compare ( size_t pos1, size_t n1, const string& str, size_t pos2, size_t n2 ) const;

Porównuje fragment napisu podanego jako argument z podciągiem aktualnego napisu złożonego z n1 znaków zaczynającym się na pozycji pos1. Równowazne z

(*this).substr(pos1, n1) == str.substr(pos2, n2);
int compare ( size_t pos1, size_t n1, const char* s, size_t n2) const;

Porównuje n2 pierwszych znaków z tablicy s z podciągiem aktualnego napisu złożonego z n1 znaków zaczynającym się na pozycji pos1.

Porównanie operacji na napisach w C i C++

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

Odnośniki

opis_kontenera/string.txt · ostatnio zmienione: 2008/12/11 21:55 przez mstefanc