Narzędzia użytkownika

Narzędzia witryny


opis_kontenera:string

To jest stara wersja strony!


String

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>

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
push_back Dodaje znak na koniec napisu
assign Zastępuje dotychczasowy napis nowym
insert Wstawia dodatkowe znaki do napisu
erase Usuwa znaki z napisu
replace Zmienia część napisu
copy Kopiuje fragment napisu
swap Zamienia zawartość dwóch stringów między sobą
Operacje dodatkowe
c_str Zwraca wskaźnik na tablicę znaków zakończoną zerem
data Zwraca wskaźnik na wewnętrzną tablicę przechowującą znaki napisu
get_allocator
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
substr Zwraca podciąg aktualnego napisu
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

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
opis_kontenera/string.1229025661.txt.gz · ostatnio zmienione: 2008/12/11 21:01 przez mstefanc