Podstawy Programowania dr Elżbieta Gawrońska gawronska@icis.pcz.pl Instytut Informatyki Teoretycznej i Stosowanej dr Elżbieta Gawrońska (ICIS) Podstawy Programowania 05 1 / 15
Plan wykładu 1 Biblioteka cstring 2 Typ std::string 3 Funkcje bazowe dla typu string 4 Inne funkcje (składowe) dla typu string dr Elżbieta Gawrońska (ICIS) Podstawy Programowania 05 2 / 15
Biblioteka cstring Wybrane elementy I char *strcpy(char *dest, const char *src); kopiuje tekst src do dest łącznie ze znakiem końca stringu, zwraca dest char *strncpy(char *dest, const char *src, size_t n); kopiuje co najwyżej n znaków z tekstu src do dest, jeśli src ma mniej niż n znaków, dopełnia dest znakami \0, zwraca dest char *strcat(char *dest, const char *src); dopisuje znaki tekstu src na koniec tekstu dest, zwraca dest char *strncat(char *dest, const char *src, size_t n); dopisuje co najwyżej n znaków tekstu src na koniec tekstu dest, zwraca dest dr Elżbieta Gawrońska (ICIS) Podstawy Programowania 05 3 / 15
Biblioteka cstring Wybrane elementy II const char s1 [ ] = "Ala ma kotka" ; char s2 [ 2 0 ], s3 [ 2 0 ] ; strcpy ( s2, s1 ) ; cout << s2 << endl ; / / Ala ma k o t k a strncpy ( s3, s2, 7) ; cout << s3 << endl ; / / Ala ma strcat ( s3, "pieska" ) ; cout << s3 << endl ; / / Ala ma p i e s k a strncat ( s3, "!!!!!", 3 ) ; cout << s3 << endl ; / / Ala ma pieska!!! dr Elżbieta Gawrońska (ICIS) Podstawy Programowania 05 4 / 15
Biblioteka cstring Wybrane elementy III int strcmp(const char *s1, const char *s2); porównuje tekst zawarty w s1 i s2, zwraca wartość: mniejszą od 0 dla s1 < s2 0 dla s1 == s2 większą od 0 dla s1 > s2 const char str1 = "Ala ma kota" ; const char str2 = "Ala ma kotka" ; cout << strcmp ( str1, str1 ) << endl ; / / 0 cout << strcmp ( str1, str2 ) << endl ; / / 1 cout << strcmp ( str2, str1 ) << endl ; / / 1 dr Elżbieta Gawrońska (ICIS) Podstawy Programowania 05 5 / 15
Biblioteka cstring Wybrane elementy IV int strncmp(const char *s1, const char *s2, size_t n); analogiczna do strcmp, ale porównująca co najwyżej n znaków size_t strlen(const char *s); zwraca długość tekstu s const char str1 = "Ala ma kota" ; const char str2 = "Ala ma kotka" ; cout << strncmp ( str1, str1, 6) << endl ; / / 0 cout << strncmp ( str1, str2, 6) << endl ; / / 0 cout << strncmp ( str2, str1, 6) << endl ; / / 0 cout << strlen ( str1 ) << endl ; / / 11 cout << strlen ( str2 ) << endl ; / / 12 dr Elżbieta Gawrońska (ICIS) Podstawy Programowania 05 6 / 15
Typ std::string Typ napisowy I typ std::string jest definiowany w bibliotece STL, aby go używać należy dołączyć plik nagłówkowy string typ std::string upodabnia korzystanie z napisów do typów podstawowych, między innymi pozwala na przypisanie i porównanie: std : : string s1 = "Ala ma kota" ; std : : string s2 = s1 ; s1 = "Ola i Jola" ; std : : cout << s1 << std : : endl << s2 ; if ( s1 == s2 ) std : : cout << "Napisy sa takie same" ; if ( s1!= s2 ) std : : cout << "Napisy sa rozne" ; if ( s1 < s2 ) std : : cout << "Napis pierwszy jest mniejszy" ; Równocześnie możliwe jest wykorzystanie typu std::string, w podobny sposób jak tablicy znakowej: dr Elżbieta Gawrońska (ICIS) Podstawy Programowania 05 7 / 15
Typ std::string Typ napisowy II std : : string a = "Ala ma kota" ; a [ 3 ] = X ; std : : cout << a ; / / w y s w i e t l i : AlaXma k o t a Inne przydatne operatory dla typu std::string: std : : string a = "Ala", b = "kot", c ; c = a + b ; std : : cout << c ; / / w y s w i e t l i : Alakot a += b ; std : : cout << a ; / / w y s w i e t l i : Alakot dr Elżbieta Gawrońska (ICIS) Podstawy Programowania 05 8 / 15
Typ std::string Funkcje (składowe) dla typu string I size_t size(); zwraca długość napisu (size_t length();) const char* c_str(); zwraca napis przechowywany w zmiennej typu string w postaci tablicy znakowej char * bool empty(); zwraca prawdę, jeśli napis jest pusty void clear(); czyści cały string, równoznaczne z erase(); string& erase(size_t pos = 0, size_t n = npos) usuwa n znaków począwszy od znaku na pozycji pos (npos jest interpretowane jako tak dużo, jak to możliwe ) dr Elżbieta Gawrońska (ICIS) Podstawy Programowania 05 9 / 15
Typ std::string Funkcje (składowe) dla typu string II string& insert(size_t pos, const string& s); string& insert(size_t pos, const char* s); umieszcza napis s przed pozycją pos, w przypadku gdy pos większe od długości stringa funkcja powoduje błąd size_t find(const string& s, size_t pos = 0); size_t find(const char* s, size_t pos = 0); szuka napisu s w stringu począwszy od znaku pos, zwraca indeks pierwszego znaku znalezionego podciągu s, w przypadku gdy szukany podciąg nie zostanie znaleziony funkcja zwraca npos dr Elżbieta Gawrońska (ICIS) Podstawy Programowania 05 10 / 15
Typ std::string Funkcje (składowe) dla typu string III string s1 = "Ala lubi kotka" ; cout << s1. size ( ) << endl ; string s2 ; if ( s1. empty ( ) == false ) cout << "s1 nie jest pusty" << endl ; if ( s2. empty ( ) == true ) cout << "s2 jest pusty" << endl ; / / c o n s t c h a r c s t r = s1 ; / / b l a d!!! const char cstr = s1. c_str ( ) ; s1. insert ( 1 2, "ecz" ) ; cout << s1 << endl ; / / Ala l u b i koteczka string s3 = "malego " ; s1. insert ( 9, s3 ) ; cout << s1 <<endl ; / / Ala l u b i malego koteczka dr Elżbieta Gawrońska (ICIS) Podstawy Programowania 05 11 / 15
Typ std::string Funkcje (składowe) dla typu string IV string s1 = "Ala nie lubi koteczka" ; s1. erase ( 3, 4 ) ; cout << s1 << endl ; / / Ala l u b i koteczka s1. clear ( ) ; if ( s1. empty ( ) ) cout << "s1 zostal wyczyszczony " << endl ; string s2 = "Ala lubi kotka, a kotek lubi Ale." ; size_t i1 = s2. find ( "kot" ) ; string s3 = "kot" ; size_t i2 = s2. find ( s3, i1+1) ; cout << s2 << endl ; cout << " Pierwszy kot: " << i1 << " drugi kot: " << i2 << endl ; dr Elżbieta Gawrońska (ICIS) Podstawy Programowania 05 12 / 15
Typ std::string Operacje wejścia wyjścia dla typu std::string I Dla typu std::string zdefiniowane są, analogicznie do typów wbudowanych, operatory << i >> Funkcja getline pobiera kolejne znaki ze strumienia wejściowego is i wstawia do łańcucha str, do momentu wystąpienia znaku delim: istream& getline (istream& is, string& str, char delim = \n ); gdzie is jest strumieniem wejściowym (np. cin), str zmienną typu std::string, do której zostanie wczytana zawartość strumienia do napotkania w nim znaku delim string s ; getline ( cin, s,, ) ; / / z klawiatury podajemy : Ala ma kotka, a kotek ma Ale! cout << s << endl ; / / Ala ma k o t k a getline ( cin, s,! ) ; cout << s << endl ; / / a k o t e k ma a l e dr Elżbieta Gawrońska (ICIS) Podstawy Programowania 05 13 / 15
Funkcje bazowe dla typu string void swap (string& s1, string& s2); zamienia zawartość obiektów łańcuchowych s1 i s2 istream& getline (istream& is, string& str, char delim); istream& getline (istream& is, string& str); pobiera kolejne znaki ze strumienia wejściowego is i wstawia do łańcucha str, do momentu wystąpienia znaku delim. Pobieranie zatrzymuje się również po napotkaniu jakiegokolwiek błędu podczas operacji wejścia: eofbit osiągnięto koniec wczytywanego pliku failbit wystąpił błąd logiczny w operacjach I/O badbit wystąpił błąd zapisu/odczytu w operacjach I/O dr Elżbieta Gawrońska (ICIS) Podstawy Programowania 05 14 / 15
Inne funkcje (składowe) dla typu string Inne funkcje składowe typu string, które warto poznać: string& assign (const string& str); przypisuje nową zawartość do łańcucha zastępując dotychczasową treść, size_t find_first_of (const string& str, size_t pos = 0) const; przeszukuje napis i zwraca pozycję pierwszego wystąpienia szukanego ciągu znaków, size_t find_last_of (const string& str, size_t pos = npos) const; string substr (size_t pos = 0, size_t n = npos) const; wyciąga podciąg znaków poszukiwany w danym napisie dr Elżbieta Gawrońska (ICIS) Podstawy Programowania 05 15 / 15