Spis treści OPERACJE NA TEKSTACH W JĘZYKU C++ Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF31



Podobne dokumenty
dr inż. Jarosław Forenc

Spis treści PLIKI TEKSTOWE W JĘZYKU C. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF22

OBWODY REZYSTANCYJNE NIELINIOWE

Podstawy Programowania

Instrukcja obsługi Norton Commander (NC) wersja 4.0. Autor: mgr inż. Tomasz Staniszewski

PERSON Kraków

Zintegrowane Systemy Zarządzania Biblioteką SOWA1 i SOWA2 SKONTRUM

Parowanie urządzeń Bluetooth. Instrukcja obsługi

1. Podstawy budowania wyra e regularnych (Regex)

Dziedziczenie : Dziedziczenie to nic innego jak definiowanie nowych klas w oparciu o już istniejące.

System Informatyczny CELAB. Przygotowanie programu do pracy - Ewidencja Czasu Pracy

Ćwiczenia IV - Kontenery (pojemniki)

WYKŁAD 8. Postacie obrazów na różnych etapach procesu przetwarzania

ZASADY WYPEŁNIANIA ANKIETY 2. ZATRUDNIENIE NA CZĘŚĆ ETATU LUB PRZEZ CZĘŚĆ OKRESU OCENY

Bazy danych II. Andrzej Grzybowski. Instytut Fizyki, Uniwersytet Śląski

Regulamin Obrad Walnego Zebrania Członków Stowarzyszenia Lokalna Grupa Działania Ziemia Bielska

GPW: Program Wspierania Płynności

Wartości domyślne, szablony funkcji i klas

Opis programu do wizualizacji algorytmów z zakresu arytmetyki komputerowej

Załącznik nr 7 do Umowy Nr z dnia r. Oświadczenie Podwykonawcy (WZÓR) W związku z wystawieniem przez Wykonawcę: faktury nr z dnia..

Programowanie Komputerów 3FZ

Uchwała Nr... Rady Miejskiej Będzina z dnia roku

Programowanie obiektowe w C++ Wykład 11

p o s t a n a w i a m

Logowanie do systemu Faktura elektroniczna

MUP.PK.III.SG /08 Lublin, dnia r.

Symfonia Produkcja Instrukcja instalacji. Wersja 2013

Regulamin Pracy Komisji Rekrutacyjnej w Publicznym Przedszkolu Nr 5 w Kozienicach

Komentarz do prac egzaminacyjnych w zawodzie technik administracji 343[01] ETAP PRAKTYCZNY EGZAMINU POTWIERDZAJĄCEGO KWALIFIKACJE ZAWODOWE

Promocja i identyfikacja wizualna projektów współfinansowanych ze środków Europejskiego Funduszu Społecznego

Projektowanie i programowanie obiektowe (materiały do wykładu cz. VI)

Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych ul. Koszykowa 75, Warszawa

VinCent Office. Moduł Drukarki Fiskalnej

Metrologia cieplna i przepływowa

raceboard-s Szybki start

Wdrożenie modułu płatności eservice dla systemu Virtuemart 2.0.x

Poniżej instrukcja użytkowania platformy

Stowarzyszenie Lokalna Grupa Działania EUROGALICJA Regulamin Rady

PROE wykład 7 kontenery tablicowe, listy. dr inż. Jacek Naruniec

Komputer i urządzenia z nim współpracujące

Warszawska Giełda Towarowa S.A.

KLAUZULE ARBITRAŻOWE

REGULAMIN RADY RODZICÓW Szkoły Podstawowej w Wawrzeńczycach

Kilka zasad o których warto trzeba pamiętać

2 Zarządzenie wchodzi w życie z dniem podpisania.

Regulamin konkursu Konkurs z Lokatą HAPPY II edycja

Ćwiczenie: "Ruch harmoniczny i fale"

Rozdział 1 Postanowienia ogólne

1. Od kiedy i gdzie należy złożyć wniosek?

UMOWA PORĘCZENIA NR [***]

Microsoft Management Console

Regulamin rekrutacji uczniów do klasy pierwszej Szkoły Podstawowej im. Maksymiliana Wilandta w Darzlubiu. Podstawa prawna: (Dz.U.2014 poz.

Instalacja. Zawartość. Wyszukiwarka. Instalacja Konfiguracja Uruchomienie i praca z raportem Metody wyszukiwania...

Wrocław, dnia 14 grudnia 2015 r. Poz UCHWAŁA NR XVI/96/15 RADY MIEJSKIEJ W BOGUSZOWIE-GORCACH. z dnia 30 listopada 2015 r.

SZKOLNA INSTRUKCJA PRZEPROWADZENIA SPRAWDZIANU UCZNIÓW KLAS SZÓSTYCH SZKOŁY PODSTAWOWEJ I EGZAMINU UCZNIÓW KLAS TRZECICH GIMNAZJUM

HiTiN Sp. z o. o. Przekaźnik kontroli temperatury RTT 4/2 DTR Katowice, ul. Szopienicka 62 C tel/fax.: + 48 (32)

UCHWAŁA NR VIII/43/2015 r. RADY MIASTA SULEJÓWEK z dnia 26 marca 2015 r.

G PROGRAMMING. Part #4

Warszawa, r.

STOWARZYSZENIE LOKALNA GRUPA DZIAŁANIA JURAJSKA KRAINA REGULAMIN ZARZĄDU. ROZDZIAŁ I Postanowienia ogólne

Oprogramowanie klawiatury matrycowej i alfanumerycznego wyświetlacza LCD

2) Drugim Roku Programu rozumie się przez to okres od 1 stycznia 2017 roku do 31 grudnia 2017 roku.

REGULAMIN przeprowadzania okresowych ocen pracowniczych w Urzędzie Miasta Mława ROZDZIAŁ I

Informatyka, I stopień. Programowanie (PRO300.1)

Wprowadzam : REGULAMIN REKRUTACJI DZIECI DO PRZEDSZKOLA NR 14

REGULAMIN OBRAD WALNEGO ZEBRANIA CZŁONKÓW STOWARZYSZENIA LOKALNA GRUPA DZIAŁANIA STOLEM

Instrukcja obsługi panelu operacyjnego XV100 w SZR-MAX-1SX

Regulamin rekrutacji do Gimnazjum w Chwaliszewie na rok szkolny 2016/2017

Zebranie Mieszkańców Budynków, zwane dalej Zebraniem, działa na podstawie: a / statutu Spółdzielni Mieszkaniowej WROCŁAWSKI DOM we Wrocławiu,

Regulamin serwisu internetowego ramowka.fm

Aplikacje internetowe i rozproszone - laboratorium

Instrukcja zapisu do grup

Instrukcja obsługi zamka. bibi-z50. (zamek autonomiczny z czytnikiem identyfikatora Mifare)

Przewodnik AirPrint. Ten dokument obowiązuje dla modeli atramentowych. Wersja A POL

Instrukcja użytkowania DRIVER. Programator z przewodem sterowniczym. DRIVER 610 lub lub 2 strefy DRIVER

Praca na wielu bazach danych część 2. (Wersja 8.1)

UCHWAŁA NR./06 RADY DZIELNICY PRAGA PÓŁNOC M. ST. WARSZAWY

Konfiguracja programu Outlook 2007 do pracy z nowym serwerem poczty (Exchange)

Zarządzanie Zasobami by CTI. Instrukcja

Ogłoszenie o zwołaniu Nadzwyczajnego Walnego Zgromadzenia Spółki ELKOP S.A.

Załącznik do zarządzenia Rektora Krakowskiej Akademii im. Andrzeja Frycza Modrzewskiego Nr 8/2013 z 4 marca 2013 r.

Grupa bezpieczeństwa kotła KSG / KSG mini

Audyt SEO. Elementy oraz proces przygotowania audytu. strona

System Zarządzania Relacyjną Bazą Danych (SZRBD) Microsoft Access 2010

Projekt współfinansowany ze środków Unii Europejskiej w ramach Europejskiego Funduszu Społecznego. Specyfikacja warunków zamówienia

db powernet Instalacja czytnika kart mikroprocesorowych (instrukcja)

Użytkowanie elektronicznego dziennika UONET PLUS.

Centrum Informatyki "ZETO" S.A. w Białymstoku. Instrukcja użytkownika dla urzędników nadających uprawnienia i ograniczenia podmiotom w ST CEIDG

I. Zakładanie nowego konta użytkownika.

PROJEKT. w sprawie: wyboru Przewodniczącego Nadzwyczajnego Walnego Zgromadzenia Spółki

Zasady rekrutacji dzieci do I klasy Szkoły Podstawowej im. hm. Janka Bytnara Rudego w Lubieniu Kujawskim na rok szkolny 2014/2015*

Instrukcja instalacji oraz wykorzystania podpisu cyfrowego

PROCEDURA REKRUTACJI DZIECI DO PRZEDSZKOLA NR 2 PROWADZONEGO PRZEZ URZĄD GMINY WE WŁOSZAKOWICACH NA ROK SZKOLNY 2014/2015

BOISKO WIELOFUNKCYJNE DZ. NR 30 URZ D GMINY KRZEMIENIEWO UL. DWORCOWA KRZEMIENIEWO

W pierwszej kolejności zaszczepione powinny być osoby powyżej 65 roku życia zameldowane na terenie Miasta Turku przewlekle chore.

Regulamin Obrad Walnego Zebrania Członków Stowarzyszenia Lokalna Grupa Rybacka Bielska Kraina Postanowienia Ogólne

REGULAMIN. przeprowadzania naboru nowych pracowników do korpusu służby cywilnej w Kuratorium Oświaty w Szczecinie.

OWIATOWY KONKURS Mistrz Klawiatury

Zasady rekrutacji, kryteria i warunki przyjęć do Przedszkola Samorządowego nr 25 w Kielcach

Transkrypt:

Politechnika Białostocka Wydział Elektryczny Katedra Elektrotechniki Teoretycznej i Metrologii Instrukcja do pracowni specjalistycznej z przedmiotu Informatyka 2 Kod przedmiotu: ES1C300 016 (studia stacjonarne) OPERACJE NA TEKSTACH W JĘZYKU C++ Spis treści 1. Opis stanowiska... 3 1.1. Stosowana aparatura... 3 1.2. Oprogramowanie... 3 2. Wiadomości teoretyczne... 3 2.1. Klasa string... 3 2.2. Konstruktor, destruktor i operator przypisania w klasie string... 4 2.3. Funkcje dotyczące pamięci przeznaczonej na dane... 7 2.4. Funkcje umożliwiające dostęp do pojedynczych znaków... 10 2.5. Funkcje modyfikujące teksty przechowywane w obiekcie... 11 2.6. Funkcje wykonujące operacje na tekstach w obiektach... 16 2.7. Funkcje globalne... 19 3. Przebieg ćwiczenia... 22 4. Literatura... 23 5. Zagadnienia na zaliczenie... 23 Numer ćwiczenia 6. Wymagania BHP... 23 INF31 Materiały dydaktyczne przeznaczone dla studentów Wydziału Elektrycznego PB. Autor: dr inż. Jarosław Forenc Białystok 2014 Wydział Elektryczny, Politechnika Białostocka, 2014 (wersja 1.0) Wszelkie prawa zastrzeżone. Żadna część tej publikacji nie może być kopiowana i odtwarzana w jakiejkolwiek formie i przy użyciu jakichkolwiek środków bez zgody posiadacza praw autorskich. Informatyka 2 2 z 24 Instrukcja INF31

Member constants Member functions Member functions 1. Opis stanowiska npos String operation Modifiers 1.1. Stosowana aparatura Member functions c_str data operator+= append Podczas zajęć wykorzystywany jest komputer klasy PC z systemem operacyjnym Microsoft Windows (XP/Vista/7). (constructor) (destructor) get_allocator copy push_back assign 1.2. Oprogramowanie Na komputerach zainstalowane jest środowisko programistyczne Microsoft Visual Studio 2008 Standard Edition lub Microsoft Visual Studio 2008 Express Edition zawierające kompilator Microsoft Visual C++ 2008. operator= Capacity size length max_size find rfind find_first_of find_last_of find_first_not_of insert erase replace swap 2. Wiadomości teoretyczne resize capacity find_last_not_of substr Global functions getline 2.1. Klasa string Klasa string przeznaczona jest do wykonywania operacji na tekstach. Jej zastosowanie w programie wymaga dołączenia pliku nagłówkowego string (bez.h na końcu). reserve clear empty Element access operator[] compare Iterators begin end rbegin operator+ operator<< operator>> comparison operators swap #include <string> at rend Klasa string jest częścią biblioteki standardowej. Wszystkie identyfikatory w niej występujące są zadeklarowane w przestrzeni nazw std. Dodając using namespace std; nie trzeba poprzedzać identyfikatorów kwalifikatorem zakresu std::. Rys. 1. Struktura klasy string 2.2. Konstruktor, destruktor i operator przypisania w klasie string W klasie string stosuje się standardowy sposób definiowania obiektów. #include <iostream> #include <string> using namespace std; Na Rys. 1 przedstawiono strukturę klasy string. nazwa_klasy nazwa_obiektu(argumenty konstruktora); Konstruktor tworzy obiekt klasy oraz inicjalizuje jego dane. Sposób inicjalizacji jest zależny od zastosowanej wersji konstruktora. Informatyka 2 3 z 24 Instrukcja INF31 Informatyka 2 4 z 24 Instrukcja INF31

(constructor) string(); - konstruktor domyślny (bezargumentowy), tworzy pusty ciąg znaków; cout << s1 << " " << s2 << " " << s3 << " "; cout << s4 << " " << s5 << endl; Tekst Tekst kst eks Tekst (constructor) string(const string & str); string(const char * s); (destructor) ~string(); - konstruktor inicjalizujący obiekt całym tekstem zawartym w innym obiekcie (str) lub w tablicy znaków (s); - destruktor usuwa obiekt zwalniając pamięć, która została przydzielona do przechowywania jego danych; (constructor) string(const string & str, size_t pos, size_t n = npos); - konstruktor inicjalizujący obiekt fragmentem tekstu z obiektu str, który rozpoczyna się od pozycji pos i zawiera n znaków (domyślna wartość n = npos oznacza wszystkie znaki do końca tekstu); (constructor) string(const char * s, size_t n); - konstruktor inicjalizujący obiekt fragmentem tekstu z tablicy znaków s zawierającym n znaków; (constructor) string(size_t n, char c); - konstruktor inicjalizujący obiekt poprzez wpisanie n takich samych znaków c; char tab[10] = "Tekst"; string s1(tab); // inicjalizacja tablicą znaków string s2(s1); // inicjalizacja innym obiektem klasy string string s3(s1,2,4); // inicjalizacja fragmentem tekstu z obiektu s1 string s4(tab,1,3); // inicjalizacja fragmentem tablicy tab string s5 = "Tekst"; // inicjalizacja C-stringiem operator= string & operator = (const string & str); string & operator = (const char * s); string & operator = (char c); - operator = przypisuje nową wartość ciągowi znaków, który jest przechowywany w obiekcie; - po prawej stronie operatora może znajdować się inny obiekt klasy string (str), tablica znaków (s) lub jeden znak (c); string s("abcdef"); string s1, s2, s3; s1 = s; // przypisanie innego obiektu klasy string s2 = "123456"; // przypisanie tablicy znaków s3 = 'a'; // przypisanie jednego znaku cout << "s: " << s << endl; cout << "s1: " << s1 << endl; cout << "s2: " << s2 << endl; cout << "s3: " << s3 << endl; s: ABCDEF s1: ABCDEF s2: 123456 s3: a Informatyka 2 5 z 24 Instrukcja INF31 Informatyka 2 6 z 24 Instrukcja INF31

2.3. Funkcje dotyczące pamięci przeznaczonej na przechowywane dane size() size_t size(); - funkcja size() zwraca liczbę znaków w obiekcie (długość łańcucha znaków); string str("12345678"); size_t d = str.size(); cout << "Dlugosc = " << d << endl; Dlugosc = 8 length() size_t length(); - funkcja length() działa tak samo jak funkcja size() - zwraca liczbę znaków w obiekcie (długość łańcucha znaków); string str("12345678"); size_t d = str.length(); cout << "Dlugosc = " << d << endl; string str; cout << str.max_size() << endl; 4294967294 resize() void resize(size_t n); void resize(size_t n, char c); - funkcja resize() zmienia długość tekstu przechowywanego w obiekcie na n znaków; - jeśli n jest mniejsze niż aktualna długość tekstu, to skraca tekst pozostawiając tylko n pierwszych znaków; - jeśli n jest większe niż aktualna długość tekstu, to dodaje na końcu miejsce na nowe znaki; miejsce to wypełniane jest znakiem c lub (jeśli nie został on podany) bajtem zerowym (znakiem null - \0 ); string s("123456789"); cout << s << endl; s.resize(5); cout << s << endl; s.resize(15,'*'); cout << s << endl; Dlugosc = 8 max_size() size_t max_size(); 123456789 12345 12345********** - funkcja max_size() zwraca maksymalną liczbę znaków, które mogą być przechowywane w obiekcie; - liczba ta wynika z ograniczeń implementacyjnych klasy string lub ograniczeń systemowych; capacity() size_t capacity(); - funkcja capacity() zwraca bieżący rozmiar zarezerwowanej pamięci do przechowywania tekstu w obiekcie; - zarezerwowana pamięć może być równa lub większa od liczby znaków aktualnie przechowywanych w obiekcie; większa liczba znaków umożliwia optymalizację operacji podczas dodawania nowych znaków; Informatyka 2 7 z 24 Instrukcja INF31 Informatyka 2 8 z 24 Instrukcja INF31

string str("12345678"); cout << str.capacity() << endl; 0-><- 15 reserve() void reserve(size_t n=0); - funkcja reserve() żąda zarezerwowania określonego rozmiaru pamięci do przechowywania tekstu w obiekcie; - argument n określa minimalny rozmiar, który będzie zarezerwowany (w rzeczywistości może on być większy); string str; str.reserve(100); cout << str.capacity() << endl; 2.4. Funkcje umożliwiające dostęp do pojedynczych znaków tekstu at() char & at(size_t pos); - funkcja at() umożliwia odwołanie do znaku o indeksie pos przechowywanym w obiekcie (znaki numerowane są od 0); - błędnie podany indeks powoduje wystąpienie wyjątku out_of_range; string str("napis testowy"); for (int i=0; i<str.size(); i++) cout << str.at(i); Napis testowy 111 operator[] char & operator [ ] (size_t pos); empty() bool empty(); - funkcja empty() zwraca wartość true jeśli obiekt jest pusty (liczba znaków tekstu wynosi 0); clear() void clear(); - funkcja clear() usuwa tekst przechowywany w obiekcie; - operator [ ] umożliwia odwołanie do znaku o indeksie pos przechowywanym w obiekcie (znaki numerowane są od 0); - nie przeprowadza kontroli poprawności indeksu pos; string str("napis testowy"); for (int i=0; i<str.size(); i++) cout << str[i]; Napis testowy string str("12345678"); if (!str.empty()) str.clear(); cout << str.size() << "->" << str << "<-" << endl; Informatyka 2 9 z 24 Instrukcja INF31 Informatyka 2 10 z 24 Instrukcja INF31

2.5. Funkcje modyfikujące tekst przechowywany w obiekcie append() string & append(size_t n, char c); operator += string & operator += (const string & str); string & operator += (const char * s); string & operator += (char c); - w tej wersji funkcja append() rozszerza istniejący tekst dodając na jego końcu n takich samych znaków c; - operator += rozszerza istniejący tekst dodając na jego końcu tekst z obiektu str, tekst z tablicy s (do znaku \0 ) lub znak c; string str("dane: "); string imie("jan "); str += imie; str += "Kowalski"; str += '\n'; cout << str; string s1("abc"), s2("123"); char s[10]="abcdef"; cout << s1 << endl; s1.append(s2); cout << s1 << endl; s1.append(s,4); cout << s1 << endl; s1.append(3,'@'); cout << s1 << endl; abc abc123 abc123abcd abc123abcd@@@ Dane: Jan Kowalski append() string & append(const string & str); string & append(const char * s); - funkcja append() rozszerza istniejący tekst dodając na jego końcu tekst z obiektu str lub tekst znajdujący się w tablicy s (do znaku \0 ); append() string & append(const string & str, size_t pos, size_t n); - w tej wersji funkcja append() rozszerza istniejący tekst dodając na jego końcu n znaków z obiektu str począwszy od pozycji pos; append() string & append(const char * s, size_t n); - w tej wersji funkcja append() rozszerza istniejący tekst dodając na jego końcu n pierwszych znaków znajdujących się w tablicy znaków s; push_back() void push_back(char c); - funkcja push_back() wstawia znak c na końcu tekstu, który jest przechowywany w obiekcie; string str("abc"); str.push_back('@'); cout << str << endl; abc@ assign() string & assign(const string & str); string & assign(const char * s); string & assign(const string & str, size_t pos, size_t n); string & assign(const char * s, size_t n); string & assign(size_t n, char c); Informatyka 2 11 z 24 Instrukcja INF31 Informatyka 2 12 z 24 Instrukcja INF31

- funkcja assign() zastępuje istniejący tekst nowym tekstem; - znaczenie wszystkich parametrów jest takie samo jak w funkcji append(); insert() string & insert(size_t pos, const string & str, size_t subpos, size_t subn); string s1("abc"), s2("123"); char s[10]="abcdef"; cout << s1 << endl; s1.assign(s2); cout << s1 << endl; s1.assign(s,4); cout << s1 << endl; s1.assign(3,'@'); cout << s1 << endl; abc 123 ABCD @@@ - w tej wersji funkcja insert() z obiektu str kopiuje subn znaków począwszy od pozycji subpos i wstawia do obiektu począwszy od miejsca określonego przez pos; erase() string & erase(size_t pos = 0, size_t n = npos); - funkcja erase() kasuje n znaków począwszy od pozycji pos; - npos oznacza wszystkie znaki do końca; insert() string & insert(size_t pos, const string & str); string & insert(size_t pos, const char *s); string str("123456789"); str.erase(3,2); cout << str << endl; str.erase(4); cout << str << endl; str.erase(); cout << str << endl; - funkcja insert() kopiuje wszystkie znaki z obiektu str lub z tablicy s i wstawia do obiektu począwszy od miejsca określonego przez pos; 1236789 1236 insert() string & insert(size_t pos, const char *s, size_t n); - w tej wersji funkcja insert() z tablicy znaków s kopiuje n pierwszych znaków i wstawia do obiektu począwszy od miejsca określonego przez pos; insert() string & insert(size_t pos, size_t n, char c); - w tej wersji funkcja insert() wstawia do obiektu n znaków c począwszy od miejsca określonego przez pos; replace() string & replace(size_t pos, size_t n, const string & str); string & replace(size_t pos, size_t n, const char * s); - funkcja replace() z tekstu przechowywanego w obiekcie usuwa n znaków znajdujących się od pozycji pos i wstawia w ich miejsce cały tekst z obiektu str lub z tablicy s; string str1("abcdefghijk"), str2("12345"); str1.replace(3,2,str2); cout << str1 << endl; abc12345fghijk Informatyka 2 13 z 24 Instrukcja INF31 Informatyka 2 14 z 24 Instrukcja INF31

replace() string & replace(size_t pos, size_t n, const string & str, size_t subpos, size_t subn); - w tej wersji funkcja replace() z tekstu przechowywanego w obiekcie usuwa n znaków znajdujących się od pozycji pos i wstawia w ich miejsce subn znaków z obiektu str znajdujących się od pozycji subpos; string str1("abcdefghijk"), str2("12345"); str1.replace(3,2,str2,2,3); cout << str1 << endl; abc345fghijk replace() string & replace(size_t pos, size_t n, const char * s, size_t subn); - w tej wersji funkcja replace() z tekstu przechowywanego w obiekcie usuwa n znaków znajdujących się od pozycji pos i wstawia w ich miejsce subn znaków z tablicy s; string str("abcdefghijk"); char s[] = "12345"; str.replace(3,2,s,3); cout << str << endl; abc123fghijk replace() string & replace(size_t pos, size_t n, size_t nc, char c); - w tej wersji funkcja replace() z tekstu przechowywanego w obiekcie usuwa n znaków znajdujących się od pozycji pos i wstawia w ich miejsce nc znaków c; string str("abcdefghijk"); str.replace(3,2,4,'@'); cout << str << endl; abc@@@@fghijk swap() void swap(string & str); - funkcja swap() wymienia tekst z obiektem str; string s1("12345"), s2("abc"); cout << "s1: " << s1 << " s2: " << s2 << endl; s1.swap(s2); cout << "s1: " << s1 << " s2: " << s2 << endl; s1: 12345 s2: ABC s1: ABC s2: 12345 2.6. Funkcje wykonujące operacje na tekstach w obiektach c_str() const char * c_str(); - funkcja c_str() zwraca wskaźnik do tablicy znaków (C-string) zakończonej znakiem \0 zawierającej tekst przechowywany w obiekcie; string str("abc 123"); char *s; s = new char[str.size()+1]; strcpy(s,str.c_str()); printf("%s\n",s); delete [] s; ABC 123 Informatyka 2 15 z 24 Instrukcja INF31 Informatyka 2 16 z 24 Instrukcja INF31

data() const char * data(); - funkcja data() zwraca wskaźnik do tablicy znaków zawierającej tekst przechowywany w obiekcie (nie dodaje \0 na końcu); copy() size_t copy(char * s, size_t n, size_t pos = 0); - funkcja copy() z tekstu przechowywanego w obiekcie kopiuje n znaków począwszy od pozycji pos, a następnie zapisuje te znaki w tablicy s; - na końcu tablicy s nie jest dodawany znak \0 ; - funkcja zwraca liczbę faktycznie przekopiowanych znaków; - funkcja rfind() działa tak samo jak find(), ale szuka ostatniego wystąpienia zawartości innego obiektu (str), tablicy znaków (s) lub pojedynczego znaku (c); substr() string substr (size_t pos = 0, size_t n = npos); - funkcja substr() zwraca obiekt klasy string zawierający n znaków tekstu począwszy od pozycji pos; string s1("123456789"), s2; s2 = s1.substr(5,3); cout << "s2: " << s2 << endl; find() size_t find(const string & str, size_t pos = 0); size_t find(const char * s, size_t pos, size_t n); size_t find(const char * s, size_t pos = 0); size_t find(char c, size_t pos = 0); 678 compare() int compare(const string & str); int compare(const char * s) - funkcja find() szuka w tekście przechowywanym w obiekcie zawartości innego obiektu (str), tablicy znaków (s) lub pojedynczego znaku (c); - zwraca pozycję pierwszego znaku zawierającego poszukiwaną zawartość; - pos określa pozycję, od której rozpoczyna się poszukiwanie, zaś n - liczbę poszukiwanych znaków; - jeśli zawartość nie została znaleziona, to funkcja find() zwraca wartość npos; rfind() size_t rfind(const string & str, size_t pos = npos); size_t rfind(const char * s, size_t pos, size_t n); size_t rfind(const char * s, size_t pos = npos); size_t rfind(char c, size_t pos = npos); - funkcja compare() porównuje tekst przechowywany w obiekcie z zawartością innego obiektu (str) lub tablicy znaków (s); - teksty są porównywane według porządku alfabetycznego z rozróżnianiem wielkich i małych liter; - wynikiem porównania jest wartość: o 0 - jeśli teksty są takie same; o -1 - jeśli tekst występuje wcześniej (według porządku alfabetycznego) niż tekst w obiekcie (str) lub tablicy znaków (s); o 1 - jeśli tekst występuje później (według porządku alfabetycznego) niż tekst w obiekcie (str) lub tablicy znaków (s); Informatyka 2 17 z 24 Instrukcja INF31 Informatyka 2 18 z 24 Instrukcja INF31

string s1("kowalski"); string s2("nowak"); string s3("kowal"); cout << "Kowalski - Nowak: " << s1.compare(s2) << endl; cout << "Nowak - Kowalski: " << s2.compare(s1) << endl; cout << "Nowak - Nowak: " << s2.compare(s2) << endl; cout << "Kowalski - Kowal: " << s1.compare(s3) << endl; Kowalski - Nowak: -1 Nowak - Kowalski: 1 Nowak - Nowak: 0 Kowalski - Kowal: 1 operator + string operator + (const string & lhs, const string & rhs); string operator + (const string & lhs, const char * rhs); string operator + (const char * lhs, const string & rhs); string operator + (const string & lhs, char rhs); string operator + (char lhs, const string & rhs); - przeładowany operator + tworzy i zwraca nowy obiekt zawierający znaki lewego (lhs), a następnie prawego (rhs) argumentu operatora; - jako argument operatora może występować inny obiekt klasy string, tablica znaków lub jeden znak; compare() int compare(size_t pos, size_t n, const string & str); int compare(size_t pos, size_t n, const string & str, size_t subpos, size_t subn); - w tej wersji funkcja compare() porównuje fragment tekstu rozpoczynający się od pozycji pos i zajmujący n znaków z zawartością całego innego obiektu (str) lub jego fragmentu, rozpoczynającego się od pozycji subpos i zajmującego subn znaków; compare() int compare(size_t pos, size_t n, const char * s); int compare(size_t pos, size_t n, const char * s, size_t m); - w tej wersji funkcja compare() porównuje fragment tekstu rozpoczynającego się od pozycji pos i zajmującego n znaków z zawartością całej innej tablicy znaków (s) lub jej pierwszych m znaków; 2.7. Funkcje globalne string file("data.txt"); string dir("doc"); string drive("c:"); string path; path = drive + '\\' + dir + '\\' + file; cout << path << endl; C:\DOC\data.txt operator == < <=!= > >= bool operator == (const string & lhs, const string & rhs); bool operator == (const char * lhs, const string & rhs); bool operator == (const string & lhs, const char * rhs); - przeładowane operatory relacyjne umożliwiają porównywanie tekstu znajdującego się w obiekcie klasy string z innym obiektem tej klasy lub z tablicą znaków; - jeśli warunek jest prawdziwy operator zwraca wartość true, w przeciwnym przypadku - wartość false; swap() void swap(string & x, string & y); - funkcja swap() zamienia miejscami teksty przechowywane w obiektach x i y; Informatyka 2 19 z 24 Instrukcja INF31 Informatyka 2 20 z 24 Instrukcja INF31

operator<< ostream & operator << (ostream & os, const string & str); 3. Przebieg ćwiczenia - przeładowanie operatora << umożliwia wstawienie do strumienia (wyświetlenie) tekstu przechowywanego w obiekcie str; operator>> istream & operator >> (istream & is, string & str); - przeładowanie operatora >> umożliwia pobranie danych ze strumienia i wstawienie ich do obiektu str; - stosując operator >> nie można wczytać tekstu zawierającego spacje, gdyż są one stosowane jako separatory wczytywanych danych (podobnie jak tabulacja i enter); getline() istream & getline(istream & is, string & str, char delim); istream & getline(istream & is, string & str); - funkcja getline() pobiera znaki ze strumienia is i zapisuje je w obiekcie str; - znaki są pobierane do wystąpienia znaku delim (pierwszy wariant) lub znaku nowej linii \n (drugi wariant); - funkcja getline() umożliwia zatem wczytanie tekstu zawierającego spacje; string name; cout << "Podaj swoje imie: "; getline(cin,name); cout << "Witaj " << name << endl; Podaj swoje imie: Jan Witaj Jan Na pracowni specjalistycznej należy wykonać wybrane zadania wskazane przez prowadzącego zajęcia. W różnych grupach mogą być wykonywane różne zadania. 1. Napisz program zawierający funkcję, do której przekazywany jest obiekt klasy string. Funkcja powinna usunąć wszystkie spacje zawarte w tekście przechowywanym w tym obiekcie. 2. Napisz program zawierający funkcję, do której przekazywany jest obiekt klasy string. Funkcja powinna sprawdzić, czy tekst przechowywany w tym obiekcie jest palindromem. Przykładowe palindromy: - A to idiota - Na morele Roman - Ada jodu dojada - Tu armata tam raut - Nago pogna twa baba w tango pogan 3. Napisz program zawierający funkcję, do której przekazywany jest obiekt klasy string. Funkcja powinna wyświetlić tekst przechowywany w stringu w taki sposób, aby każdy wyraz znalazł się w oddzielnym wierszu. Uwaga: pomiędzy wyrazami może znajdować się więcej niż jedna spacja. Przykład: Tekst: Wydruk: Ala ma kota Ala ma Kota Informatyka 2 21 z 24 Instrukcja INF31 Informatyka 2 22 z 24 Instrukcja INF31

4. Literatura [1] Grębosz J.: Symfonia C++ standard: programowanie w języku C++ orientowane obiektowo. Tom 1 i 2. Wydawnictwo Edition 2000, Kraków, 2008. [2] Stroustrup B.: Programowanie. Teoria i praktyka z wykorzystaniem C++. Wydanie II poprawione. Helion, Gliwice, 2013. [3] Eckel B.: Thinking in C++. Edycja polska. Helion, Gliwice, 2002. [4] Prata S.: Język C++. Szkoła programowania. Wydanie VI. Helion, Gliwice, 2012. [5] http://www.cplusplus.com/reference/string/string - C++ Reference - class string 5. Zagadnienia na zaliczenie 1. Wyjaśnij, czym różni się sposób przechowywania ciągu znaków w obiekcie klasy string i w tablicy znaków (C-stringu). 2. Opisz sposoby inicjalizacji obiektów klasy string. 3. Wyjaśnij, w jaki sposób można porównywać ze sobą zawartość dwóch obiektów klasy string. 6. Wymagania BHP Warunkiem przystąpienia do praktycznej realizacji ćwiczenia jest zapoznanie się z instrukcją BHP i instrukcją przeciw pożarową oraz przestrzeganie zasad w nich zawartych. W trakcie zajęć laboratoryjnych należy przestrzegać następujących zasad. - Sprawdzić, czy urządzenia dostępne na stanowisku laboratoryjnym są w stanie kompletnym, nie wskazującym na fizyczne uszkodzenie. - Jeżeli istnieje taka możliwość, należy dostosować warunki stanowiska do własnych potrzeb, ze względu na ergonomię. Monitor komputera ustawić w sposób zapewniający stałą i wygodną obserwację dla wszystkich członków zespołu. - Sprawdzić prawidłowość połączeń urządzeń. - Załączenie komputera może nastąpić po wyrażeniu zgody przez prowadzącego. - W trakcie pracy z komputerem zabronione jest spożywanie posiłków i picie napojów. - W przypadku zakończenia pracy należy zakończyć sesję przez wydanie polecenia wylogowania. Zamknięcie systemu operacyjnego może się odbywać tylko na wyraźne polecenie prowadzącego. - Zabronione jest dokonywanie jakichkolwiek przełączeń oraz wymiana elementów składowych stanowiska. - Zabroniona jest zmiana konfiguracji komputera, w tym systemu operacyjnego i programów użytkowych, która nie wynika z programu zajęć i nie jest wykonywana w porozumieniu z prowadzącym zajęcia. - W przypadku zaniku napięcia zasilającego należy niezwłocznie wyłączyć wszystkie urządzenia. - Stwierdzone wszelkie braki w wyposażeniu stanowiska oraz nieprawidłowości w funkcjonowaniu sprzętu należy przekazywać prowadzącemu zajęcia. - Zabrania się samodzielnego włączania, manipulowania i korzystania z urządzeń nie należących do danego ćwiczenia. - W przypadku wystąpienia porażenia prądem elektrycznym należy niezwłocznie wyłączyć zasilanie stanowiska. Przed odłączeniem napięcia nie dotykać porażonego. Informatyka 2 23 z 24 Instrukcja INF31 Informatyka 2 24 z 24 Instrukcja INF31