#include <iostream> #include <string> using namespace std; auto main() -> int { string s1; // pusty string. Klasa std::string

Podobne dokumenty
Łańcuchy znakowe string

Operatory na rzecz typu TString

Programowanie i struktury danych

dr inż. Jarosław Forenc

STL: Lekcja 1&2. Filozofia STL

Wykład II. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Podstawy Programowania

Wstęp do programowania obiektowego. Przekazywanie parametrów do funkcji w C++ Metody i funkcje operatorowe Strumienie: standardowe, plikowe, napisowe

Zaawansowane programowanie w języku C++ Biblioteka standardowa

Dla każdej operacji łącznie tworzenia danych i zapisu ich do pliku przeprowadzić pomiar czasu wykonania polecenia. Wyniki przedstawić w tabelce.

Pliki wykład 2 -przekazywanie strumieni do funkcji -funkcje get(char &) i getline(string)

PROE wykład 3 klasa string, przeciążanie funkcji, operatory. dr inż. Jacek Naruniec

Zajęcia nr 2 Programowanie strukturalne. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40

Projektowanie klas c.d. Projektowanie klas przykład

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 15 kwietnia K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33

Techniki programowania INP001002Wl rok akademicki 2017/18 semestr letni. Wykład 5. Karol Tarnowski A-1 p.

Programowanie w C++ Wykład 9. Katarzyna Grzelak. 14 maja K.Grzelak (Wykład 9) Programowanie w C++ 1 / 30

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 5. Karol Tarnowski A-1 p.

Język C++ zajęcia nr 2

Języki programowania obiektowego Nieobiektowe elementy języka C++

Pliki wykład 2. Dorota Pylak

Tablice. Monika Wrzosek (IM UG) Podstawy Programowania 96 / 119

Zajęcia nr 5 Algorytmy i wskaźniki. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Programowanie w językach

Języki programowania. Przetwarzanie tablic znaków. Część druga. Autorzy Tomasz Xięski Roman Simiński

ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2015

Podstawy programowania. Wykład: 9. Łańcuchy znaków. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej

Podstawy programowania

Programowanie. Sylwester Arabas. prowadzący ćwiczenia: Magdalena Kuich, Krzysztof Piasecki, Łukasz Dulny. Wydział Fizyki Uniwersytetu Warszawskiego

Operacje wejścia/wyjścia (odsłona druga) - pliki

Pliki wykład 2. Dorota Pylak

Języki i techniki programowania Ćwiczenia 2

1 Pierwsze kroki w C++ cz.3 2 Obsługa plików

Język C++ wykład VIII

Wstęp do programowania

Aby uzyskać zaliczenie w pierwszym terminie (do 30 stycznia 2018) rozliczyć trzeba co najmniej 8 projektów, po 4 z każdej z części: C++ oraz Python.

Programowanie i struktury danych

Podstawy programowania skrót z wykładów:

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 16 kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27

Programowanie w C++ Wykład 7. Katarzyna Grzelak. 23 kwietnia K.Grzelak (Wykład 7) Programowanie w C++ 1 / 40

Programowanie komputerowe. Zajęcia 5

Podstawy programowania. Wykład: 5. Instrukcje sterujące c.d. Stałe, Typy zmiennych c.d. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy,

> C++ dynamiczna alokacja/rezerwacja/przydział pamięci. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki

Programowanie w C++ Wykład 6. Katarzyna Grzelak. 1 kwietnia K.Grzelak (Wykład 6) Programowanie w C++ 1 / 43

JSLib 4.1 Dokumentacja

Laboratorium 1. Programowanie II - Kierunek Informatyka. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej

Część 4 życie programu

lekcja 8a Gry komputerowe MasterMind

Podstawy programowania w języku C++

Paradygmaty programowania

Wprowadzenie do programowania i programowanie obiektowe

Programowanie w C++ Wykład 11. Katarzyna Grzelak. 21 maja K.Grzelak (Wykład 11) Programowanie w C++ 1 / 24

Programowanie w C++ Wykład 4. Katarzyna Grzelak. 19 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 37

Program dopisujący gwiazdkę na końcu pliku tekstowego o nazwie podanej przez uŝytkownika oraz wypisujący zawartość tego pliku.

Ok. Rozbijmy to na czynniki pierwsze, pomijając fragmenty, które już znamy:

Algorytmy i Struktury Danych.

1 P roste e t ypy p d a d n a ych c - c ąg ą g d a d l a szy 2 T y T py p z ł z o ł żo ż ne e d a d n a ych c : T BLICE

Materiał Typy zmiennych Instrukcje warunkowe Pętle Tablice statyczne Wskaźniki Tablice dynamiczne Referencje Funkcje

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi

4. Wyrzuć wyjątek jeśli zmienna ist nie istnieje bloki: try, catch i wyrzucanie wyjątku

Pętle i tablice. Spotkanie 3. Pętle: for, while, do while. Tablice. Przykłady

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

wykład IV uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C, a C++. wykład IV dr Jarosław Mederski Spis Język C++ - wstęp

Zadania z podstaw programowania obiektowego

Wiadomości wstępne Środowisko programistyczne Najważniejsze różnice C/C++ vs Java

Wykład 9 Pliki cz.3 (getline(string)) Typ wyliczeniowy enum

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

EGZAMIN 2 (14 WRZEŚNIA 2015) JĘZYK C++

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 12. Karol Tarnowski A-1 p.

#include <stdio.h> int main( ) { int x = 10; long y = 20; double s; s = x + y; printf ( %s obliczen %d + %ld = %f, Wynik, x, y, s ); }

> C++ wskaźniki. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki 26 kwietnia 2017

Wstęp do informatyki- wykład 12 Funkcje (przekazywanie parametrów przez wartość i zmienną)

Wskaźniki. nie są konieczne, ale dają językowi siłę i elastyczność są języki w których nie używa się wskaźników typ wskaźnikowy typ pochodny:

DANE TEKSTOWE W JĘZYKU C/C++ - TABLICE ZNAKOWE

2 Przygotował: mgr inż. Maciej Lasota

Wykład II Tablice (wstęp) Przykłady algorytmów Wstęp do języka C/C++

Programowanie w C++ z użyciem kontenerów - parę przykładów programów Opracowanie: dr hab. Mirosław R. Dudek, prof. UZ

Algorytmy i Struktury Danych. Anna Paszyńska

VII. Ciągi znaków łańcuchy

Jak Windows zarządza pamięcią?

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 5

Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

Opus Magnum C++11 : programowanie w języku C++. T. 2 / Jerzy Grębosz. Gliwice, cop Spis treści

Podstawy informatyki. Elektrotechnika I rok. Język C++ Operacje na danych - wskaźniki Instrukcja do ćwiczenia

Podstawy programowania. Wykład: 9. Łańcuchy znaków. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Programowanie obiektowe w C++ Wykład 1

Wstęp do programowania

po ostatnim dopisaniu na standardowe wyjście (cout) powinien zostać wyprowadzony komunikat "Skonczylem";

Wzorce funkcji (szablony)

Wstęp do informatyki- wykład 8 Pętla while, do while,for -pętla w pętli- przykłady Operator rzutowania Manipulatory

Programowanie w języku C++

Wykład 2 Składnia języka C# (cz. 1)

Ćwiczenie 7 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania. Zofia Kruczkiewicz

Wstęp do programowania

tablica: dane_liczbowe

Wykład 5 Wybrane zagadnienia programowania w C++ (c.d.)

Programowanie C++ Wykład 2 - podstawy języka C++ dr inż. Jakub Możaryn. Warszawa, Instytut Automatyki i Robotyki

Transkrypt:

Klasa std::string Utworzenie obiektu typu std::string odbywa się podobnie jak dowolnej zmiennej typu wbudowanego. Jednak w tym przypadku można też stworzyć obiekt zainicjalizowany danymi obiekt budowany jest przez specjalną metodę składową, konstruktor. Konstruktorów może być dowolnie wiele, muszą różnić się argumentami. auto main() -> int { string s1; // pusty string Zbadajmy jaki jest rozmiar i bufor obiektu s1: for (auto i(0); i<1025; ++i) { s1 += "a"; cout << s1.size() << " " << s1.capacity() << endl; Dodatkowo co będzie gdy: s1.clear(); s1.empty(); // zwraca true lub false s1.shrink_to_fit(); s1.reserve(57); // jakie capacity()?

Tworzymy kolejne obiekty std::string Oto kilka sposobów na utworzenie / przypisanie obiektu typu std::string const char *t = "tekst do inicjalizacji"; s1 = t; string s2( s1); // obiekt na wzór istniejącego wcześniej string s3( t, 8 ); // pierwsze 8 znaków string s4( s2, 6, 8 ); // od 6-tego do 6+8 -mego, czyli string s5( 100, * ); // chcę mieć sto gwiazdek string s6 = "konstrukcja"; string s7 = { "uniwersalna inicjalizacja" ; // = opcjonalnie Działania na stringach bez problemu: s1 = s1 + " drugi " + s2; s1 += s6;

Maksymalny rozmiar i pewna stała: Sprawdźcie jaka jest wartość tej stałej: Rozmiary, usuwanie max_size() // zwykła metoda składowa string().max_size(); // string w locie std::string::npos Wielkie usuwanie (erase metoda składowa): erase( nr_od, nr_ile ); // zwraca referencję do erase( adres_od, adres_do ); // zwraca adres nast. znaku Specjalne funkcje adresowe (zwracające tzw. iteratory czyli obiekty udające wskaźniki przechowalniki adresu i wiedzy o typie): begin(); // adres początku zerowej pozycji end(); // adres za ostatnim elementem, za-ostatni

Przykład, dodatkowo z algorytmem find: #include <algorithm> int main () { string s = "To jest dobry przyklad"; cout << s << '\n'; s.erase(0, 3); // usuń "To " cout << s << '\n'; Usuwanie s.erase( std::find(s.begin(), s.end(), ' ') ); // usuń pierwszą spację ' ' cout << s << '\n'; s.erase( s.find(' ') ); // Znajdź kolejną i usuń wszystko od niej do końca for ( auto n : s ) cout << n << " - "; // literka po literce

Małe ćwiczenie Narysujmy za pomocą erase taką sekwencję ****************** ***************** **************** *************** I tak dalej int main () { string str (20, '*'); // tworzymy łańcuch znakowy z 20-tu gwiazdek while (! str.empty() ) { cout << str << endl; str.erase( str.end()-1 ); // samo end() to pozycja za-ostatnia

Wyścig wątków #include <thread> void addstring( unsigned n, string& s ) { while (n--) { s += "*"; cout << "A"; void removestring( string& s ) { while (!s.empty() ) { s.erase( s.end()-1 ); cout << "B"; int main() { string m; thread t1( addstring, 100, ref(m) ); thread t2( removestring, ref(m) ); t1.join(); t2.join(); cout << endl << m << endl; Argument funkcji: string& s oznacza przez referencję, czyli przez przezwisko, z intencją pracy na oryginale. Argumenty funkcji wywoływanej w wątku (obiekt thread) przekazuje się po prostu jako kolejne wielkości, po przecinku, gdzie pierwszym argumentem obiektu thread jest nazwa funkcji, która ma być wykonywana. join() informuje główny wątek (program), że ma poczekać z zakończeniem aż do skończenia działania danego wątku podrzędnego Opakowanie std::ref jest konieczne tutaj, jeśli chcemy do wątku przekazać obiekt-oryginał przez referencję. Ewentualnie można też użyć wskaźnik.

Losowanie liczb #include <random> #include <ctime> int main() { /* Inicjalizacja. Tylko raz, na początku. */ random_device rd; mt19937_64 gen(rd()); // seed z rd // można też tak: // mt19937::result_type seed = time(0); // mt19937_64 gen( seed ); /* Generator płaski w oparciu o typ short */ uniform_int_distribution<short> dis; /* Kilka liczb, konwertujemy na string */ for (auto n=0; n<10; ++n) cout << dis(gen) << ' ' << to_string( dis(gen) ) << ' '; endl ( cout ); std::random_device to generator liczb całkowitych o jednorodnym rozkładzie, produkujący liczby w sposób niedeterministyczny (zależnie od dostępu do sprzętowego niedeterministycznego źródła) Mersenne Twister to algorytm generatora liczb pseudolosowych. Silnik tego generatora inicjalizowany jest często poprzez generator std::random_device, domyślna wersja 64-bitowa to std::mt19937_64 Rozkłady losowe, takie jak std::uniform_int_distribution, używają silników (j.w.), generując liczby. Są też rozkłady Bernoulliego, normalny, Poissona. rand() z języka C jest oznaczony w C++14 jako deprecated (przestarzały), w C++17 zniknie

Wczytywanie z pliku Utwórzmy obiekt do obsługi strumienia plikowego i wczytajmy a potem wypiszmy! #include <fstream> string s10; string str; cout << "Wprowadz tekst: "; cin >> str; cout << "Wczytano to: " << str << endl; getline (cin, str, '@'); // koniec = znaczek @ cout << "Wczytano tamto: " << str << endl; Bufor cin nadal trzyma starą zawartość, tu poczytajcie jak to wyczyścić http://cpp0x.pl/kursy/kurs-c++/poziom-1/obsluga-strumienia-wejsciowego/12 ifstream plik("tekst.txt"); // np. wziąć z: pl.lipsum.com while (! plik.eof() ) { getline (plik, str); s10 += str; // czego tu brakuje? Znak końca linii + \n // wypiszcie na ekran cout << s10;

Przebiegamy po stringu String to forma kontenera sekwencyjnego jakby tablicy znaków string s1 = "wlazl kotek na plotek i mruga"; for ( auto c : s1 ) cout << c << " "; // range-based loop for ( auto& c : s1 ) c = ( c== w )? W : c; // zamieniamy na wielkie W, co z nawiasami? for ( int i=0; i < s1.length(); ++i ) cout << s1[i] << " "; ITERATOR inteligentny pośrednik pomiędzy kontenerami (zasobnikami), wskaźnik z adresem do operacji na konkretnych typach, strumieniach string::iterator it; // na razie pusty it = s1.begin(); // początek end() koniec while ( it!= s1.end() ) { cout << *it << endl; ++it; ITERATOR STRUMIENIA auto it = s1.begin(); copy (s1.begin(), s1.end(), ostream_iterator<char>(cout,"\n")); // używamy algorytmu copy (ten z nagłówka <algorithm>) // tworzymy w locie iterator strumienia wyjściowego, ostream_iterator // konieczny nagłówek #include <iterator>