Różnice między wybraną wersją a wersją aktualną.
Both sides previous revision Previous revision Next revision | Previous revision | ||
opis_kontenera:string [2008/12/11 21:11] mstefanc |
opis_kontenera:string [2008/12/11 21:55] mstefanc |
||
---|---|---|---|
Linia 1: | Linia 1: | ||
====== String ====== | ====== 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. | 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. | ||
Linia 43: | Linia 43: | ||
^Modyfikacja^^ | ^Modyfikacja^^ | ||
|[[string#operator+=]] |Dopisuje znaki na końcu napisu | | |[[string#operator+=]] |Dopisuje znaki na końcu napisu | | ||
- | |append |Dopisuje znaki na końcu napisu | | + | |[[string#append]] |Dopisuje znaki na końcu napisu | |
|<code cpp>void push_back ( char c );</code>|Dodaje znak //c// na koniec napisu | | |<code cpp>void push_back ( char c );</code>|Dodaje znak //c// na koniec napisu | | ||
- | |assign |Zastępuje dotychczasowy napis nowym | | + | |[[string#assign]] |Zastępuje dotychczasowy napis nowym | |
- | |insert |Wstawia dodatkowe znaki do napisu | | + | |[[string#insert]] |Wstawia dodatkowe znaki do napisu | |
- | |erase |Usuwa znaki z napisu | | + | |[[string#erase]] |Usuwa znaki z napisu | |
- | |replace |Zmienia część napisu | | + | |[[string#replace]] |Zmienia część napisu | |
|<code cpp>size_t copy ( char* s, size_t n, size_t pos = 0) const;</code> |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. | | |<code cpp>size_t copy ( char* s, size_t n, size_t pos = 0) const;</code> |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. | | ||
|<code cpp>void swap ( string& str );</code> |Zamienia zawartość aktualnego napisu z napisem //str//. | | |<code cpp>void swap ( string& str );</code> |Zamienia zawartość aktualnego napisu z napisem //str//. | | ||
Linia 54: | Linia 54: | ||
|<code cpp>const char* c_str ( ) const;</code> |Zwraca wskaźnik na tablicę znaków zakończoną zerem reprezentującą zawartość napisu. | | |<code cpp>const char* c_str ( ) const;</code> |Zwraca wskaźnik na tablicę znaków zakończoną zerem reprezentującą zawartość napisu. | | ||
|<code cpp>const char* data ( ) const;</code> |Zwraca wskaźnik na wewnętrzną tablicę przechowującą znaki napisu. Łańsuch nie zawiera kończącego zera. | | |<code cpp>const char* data ( ) const;</code> |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 | | + | |[[string#find]] |Wyszukuje pierwsze wystąpienie znaku/ciągu w napisie | |
- | |rfind |Wyszukuje ostatnie wystąpienie znaku/ciągu w napisie | | + | |[[string#find|rfind]] |Wyszukuje ostatnie wystąpienie znaku/ciągu w napisie | |
- | |find_first_of |Wyszukuje pierwsze wystąpienie jednego z podanych znaków | | + | |[[string#find|find_first_of]] |Wyszukuje pierwsze wystąpienie jednego z podanych znaków | |
- | |find_last_of |Wyszukuje ostatnie wystąpienie jednego z podanych znaków | | + | |[[string#find|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 | | + | |[[string#find|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#find|find_last_not_of]] |Wyszukuje ostatnie wystąpienie znaku nie podanego jako argument | |
|<code>string substr ( size_t pos = 0, size_t n = npos ) const;</code> |Zwraca podciąg aktualnego napisu zaczynający się na pozycji //pos// i składający się maksymalnie z //n// znaków | | |<code>string substr ( size_t pos = 0, size_t n = npos ) const;</code> |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 | | + | |[[string#compare]] |Porównuje dwa stringi | |
===== Konstruktory ===== | ===== Konstruktory ===== | ||
Linia 222: | Linia 222: | ||
===== Operacje dodatkowe ===== | ===== 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. | ||
+ | |||
+ | <code cpp>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;</code> | ||
+ | |||
+ | 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. | ||
+ | |||
+ | <code cpp>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;</code> | ||
+ | |||
+ | 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 === | ||
+ | |||
+ | <code cpp>int compare ( const string& str ) const;</code> | ||
+ | <code cpp>int compare ( const char* s ) const;</code> | ||
+ | |||
+ | Porównuje cały napis z podanym argumentem. Równoważne z | ||
+ | <code cpp>*this == str; | ||
+ | *this == s;</code> | ||
+ | |||
+ | |||
+ | <code cpp>int compare ( size_t pos1, size_t n1, const string& str ) const; | ||
+ | int compare ( size_t pos1, size_t n1, const char* s) const;</code> | ||
+ | |||
+ | 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 | ||
+ | <code cpp>(*this).substr(pos1, n1) == str; | ||
+ | (*this).substr(pos1, n1) == s;</code> | ||
+ | |||
+ | <code cpp>int compare ( size_t pos1, size_t n1, const string& str, size_t pos2, size_t n2 ) const;</code> | ||
+ | |||
+ | 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 | ||
+ | <code cpp>(*this).substr(pos1, n1) == str.substr(pos2, n2);</code> | ||
+ | |||
+ | <code cpp>int compare ( size_t pos1, size_t n1, const char* s, size_t n2) const;</code> | ||
+ | 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++ ===== | ===== Porównanie operacji na napisach w C i C++ ===== | ||
Linia 233: | Linia 284: | ||
| Wyszukiwanie jednego ze znaków | strspn(s1, "abc") | s1.find_first_of("abc") | | | Wyszukiwanie jednego ze znaków | strspn(s1, "abc") | s1.find_first_of("abc") | | ||
| Podział na podnapisy | strtok(s1, " ") | brak | | | Podział na podnapisy | strtok(s1, " ") | brak | | ||
+ | |||
+ | ===== Odnośniki ===== | ||
+ | |||
+ | [[http://www.cplusplus.com/reference/string/string/|C++ Reference]] \\ | ||
+ | [[http://pl.wikibooks.org/wiki/C%2B%2B:String|Wikibooks, biblioteka wolnych podręczników]] \\ | ||
+ | |||
+ | ---- | ||
+ | |||
+ | --- //[[maciek.slon@gmail.com|Maciej Stefańczyk]] 2008/12/11 21:52// |