Podstawy Programowania - Instytut Informatyki Teoretycznej i
Transkrypt
Podstawy Programowania - Instytut Informatyki Teoretycznej i
Podstawy Programowania dr Elżbieta Gawrońska [email protected] 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 łacznie ˛ 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 przykład: 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 p i e s k a ! ! ! 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ść: mniejsza˛ od 0 dla s1 < s2 0 dla s1 == s2 wi˛eksza˛ od 0 dla s1 > s2 przykład: 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ównujaca ˛ co najwyżej n znaków size_t strlen(const char *s); zwraca długość tekstu s przykład: 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łaczyć ˛ plik nagłówkowy string typ std::string upodabnia korzystanie z napisów do typów podstawowych, mi˛edzy innymi pozwala na przypisanie i porównanie: przykład: 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 przykład: 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: przykład: std : : string a = " Ala " , b = " kot " , c ; c = a + b; std : : cout << c ; / / w y s w i e t l i : A l a k o t a += b ; std : : cout << a ; / / w y s w i e t l i : A l a k o t 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˛e, 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 poczawszy ˛ 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 pozycja˛ pos, w przypadku gdy pos wi˛eksze od długości stringa funkcja powoduje bład ˛ 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 poczawszy ˛ od znaku pos, zwraca indeks pierwszego znaku znalezionego podciagu ˛ s, w przypadku gdy szukany podciag ˛ 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 przykład: 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 k o t e c z k a string s3 = " malego " ; s1 . insert ( 9 , s3 ) ; cout << s1 <<endl ; / / Ala l u b i malego k o t e c z k a dr Elżbieta Gawrońska (ICIS) Podstawy Programowania 05 11 / 15 Typ std::string Funkcje (składowe) dla typu string IV przykład: string s1 = " Ala nie lubi koteczka " ; s1 . erase ( 3 , 4 ) ; cout << s1 << endl ; / / Ala l u b i k o t e c z k a 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 sa,˛ 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 wystapienia ˛ znaku delim: istream& getline (istream& is, string& str, char delim = ’\n’); gdzie is jest strumieniem wejściowym (np. cin), str zmienna˛ typu std::string, do której zostanie wczytana zawartość strumienia do napotkania w nim znaku delim przykład: string s ; getline ( cin , s , ’,’ ) ; / / z k l a w i a t u r y podajemy : Ala ma k o t k a , a k o t e k 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 ˛ znaku delim. Pobieranie łańcucha str, do momentu wystapienia zatrzymuje si˛e również po napotkaniu jakiegokolwiek bł˛edu podczas operacji wejścia: eofbit – osiagni˛ ˛ eto koniec wczytywanego pliku failbit – wystapił ˛ bład ˛ logiczny w operacjach I/O badbit – wystapił ˛ bład ˛ 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 nowa˛ zawartość do łańcucha zast˛epujac ˛ dotychczasowa˛ treść, size_t find_first_of (const string& str, size_t pos = 0) const; przeszukuje napis i zwraca pozycj˛e pierwszego wystapienia ˛ szukanego ciagu ˛ 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; wyciaga ˛ podciag ˛ znaków poszukiwany w danym napisie dr Elżbieta Gawrońska (ICIS) Podstawy Programowania 05 15 / 15