Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Podstawy informatyki 2012/2013

Podobne prezentacje


Prezentacja na temat: "Podstawy informatyki 2012/2013"— Zapis prezentacji:

1 Podstawy informatyki 2012/2013
Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi i Pawła Jerzego Matuszyka

2 Struktura wektor struct wektor { int n; double *W; void wypisz(); }; void wektor::wypisz() for (int i=0;i<n;i++) cout << W[i] << "\t"; cout << endl; } int main() { wektor X,Y; X.n=2;X.W=new double[2]; X.W[0]=1;X.W[1]=2; X.wypisz(); Y.n=2;Y.W=new double[2]; Y.W[0]=3;Y.W[1]=4; Y.wypisz(); Y=X; Y.W[1]=3; return 0; } 1 2 3 4 1 2 1 2 1 3 1 3

3 Co powinien robić operator przypisania?
Sprawdzić czy nie kopiuje do samego siebie (A=A). Zlikwidować dotychczasowe wnętrze. Zbudować obiekt jeszcze raz na podobieństwo obiektu wzorcowego. Zwracać skopiowany albo wzorcowy obiekt (są takie same).

4 Operator = wektor &wektor::operator=(const wektor &A) { if (&A==this) return *this; delete [] W; n=A.n; W=new double[n]; for (int i=0;i<n;i++) W[i]=A.W[i]; return *this; }

5 Struktura wektor struct wektor { int n; double *W; void wypisz(); wektor &operator=(const wektor &A); }; void wektor::wypisz() for (int i=0;i<n;i++) cout << W[i] << "\t"; cout << endl; } int main() { wektor X; X.n=2; X.W=new double[2]; X.W[0]=1; X.W[1]=2; X.wypisz(); wektor Y=X; Y.wypisz(); Y.W[1]=3; return 0; } 1 2 1 2 1 2 1 3 1 3

6 Struktura wektor wektor Y=X; wywoływany jest nie operator przypisania tylko konstruktor kopiujący!!!

7 std::string Tablice znaków (C-stringi) nie są typem fundamentalnym. Nie ma więc w C++ operacji na C-stringach. Dlatego powstała klasa string, która zawiera funkcje przydatne przy pracy z ciągami znaków.

8 Definiowanie - konstruktory
string(); string t1; string(const char *); string t2("AGH"); char c[]="WIMiIP”; string t3(c); string t4(&c[1]); string(const char *, size_type); string t5("WIMiIP AGH",6); string(size_type, char); string t6(10,'A'); string(const string &); string t7(t2); string(const string &, size_type, size_type); string t8(t4,1,2);

9 Definiowanie - konstruktory
#include<string> … int main(){ string t1; string t2("AGH"); char c[]="WIMiIP"; string t3(c); string t4(&c[1]); string t5("WIMiIP AGH",6); string t6(8,'A'); string t7(t2); string t8(t4,1,2); } AGH WIMiIP IMiIP WIMiIP AAAAAAAA AGH Mi

10 Dodawanie string operator+(const string& lhs, const string& rhs); string operator+(const char* lhs, const string& rhs); string operator+(char lhs, const string& rhs); string operator+(const string& lhs, const char* rhs); string operator+(const string& lhs, char rhs);

11 cout << t4 << endl; return 0; }
Operator + int main() { string t1, t2, t3, t4; t1="1 IS"; t2="WIMiIP"; t3="AGH"; t4=t1+"\n"+t2+"\n"+t3; cout << t4 << endl; return 0; } 1 IS WIMiIP AGH

12 Dodawanie z przypisaniem
string& string::operator+=(const string& str); string& string::operator+=(const char* s); string& string::operator+=(char c);

13 Operator += int main() { string t; for (int i=static_cast<int>('A');i<=static_cast<int>('Z');i++) t+=static_cast<char>(i); cout << t << endl; return 0; } ABCDEFGHIJKLMNOPQRSTUVWXYZ

14 Długość size_type string::size(); size_type string::length(); int main() { string t="AGH"; cout << t << endl; cout << t.length() << endl; cout << t.size() << endl; return 0; } AGH 3

15 Pojemność size_type string::capacity(); size_type string::max_size(); bool string::empty(); string tekst; tekst.empty(); tekst.length(); tekst.capacity(); tekst.max_size(); true 15

16 Pojemność int main() { string tekst; cout <<"Dlugosc\tPojemnosc\n"; cout << tekst.length() << "\t"; cout << tekst.capacity() << endl; for (int i=0; i<250; i++) tekst+='A'; if (tekst.length()==tekst.capacity()) } return 0; 0 15 16 31 32 47 48 70 71 105

17 Rezerwacja pamięci void string::reserve(size_type ile); int main() { string tekst; cout << tekst.length() << "\t"; cout << tekst.capacity() << endl; tekst.reserve(100); if (tekst.empty()) cout << "tekst jest pusty" << endl; return 0; } 0 15 0 111 tekst jest pusty

18 Zmiana długości ABCDEFGH 8 ABC 3 ABC 10
void string::resize(size_type ile, char znak=‘\0’); int main() { string tekst("ABCDEFGH"); cout << tekst << "\t"; cout << tekst.length() << endl; tekst.resize(3); tekst.resize(10); return 0; } ABCDEFGH 8 ABC 3 ABC 10

19 Zmiana długości ABCDEFGH 8 ABC 3 ABC....... 10
int main() { string tekst("ABCDEFGH"); cout << tekst << "\t"; cout << tekst.length() << endl; tekst.resize(3); tekst.resize(10,'.'); return 0; } ABCDEFGH 8 ABC 3 ABC

20 reserve vs resize int main() { string tekst("ABCDEFGH"); cout << tekst.length() << "\t"; cout << tekst.capacity() << endl; tekst.resize(3); tekst.resize(10); return 0; } 8 15 3 15 10 15

21 [] oraz at char &string::operator[](size_type pozycja); char &string::at(size_type pozycja); int main() { string tekst("AGH"); cout << tekst[1] << endl; cout << tekst.at(1) << endl; return 0; } G

22 [] vs at string tekst("AGH"); cout << tekst[4] << endl; cout << tekst.at(4) << endl;

23 [] vs at Wartość spoza stringu
#include <iostream> #include<string> #include<stdexcept> using namespace std; int main() { string tekst("AGH"); try cout << tekst.at(4) << endl; } catch(out_of_range) cout << "Wartosc spoza stringu" << endl; return 0; Wartość spoza stringu

24 substr string string::substr(size_type pozycja, size_type ile); int main() { string tekst1("AGH WIMiIP"), tekst2; tekst2=tekst1.substr(4,6); cout << tekst1 << endl; cout << tekst2 << endl; return 0; } AGH WIMiIP WIMiIP

25 Wyszukiwanie size_type string::find(const char* co, size_type odkad=0); size_type string::find(const string & co, size_type odkad=0);, size_type string::find(const char* co, size_type odkad, size_type dlugosc); size_type string::find(char co, size_type odkad=0);

26 find int main() { string tekst1("AGH WIMiIP AGH"), tekst2("AGH"); string::size_type poz1,poz2; cout << tekst1 << endl; cout << tekst2 << endl; poz1=tekst1.find(tekst2); cout << poz1 << endl; poz2=tekst1.find(tekst2,poz1+1); cout << poz2 << endl; return 0; } AGH WIMiIP AGH AGH 11

27 Co jeśli nie ma? int main() { string tekst1("AGH"), tekst2("UJ"); string::size_type poz; poz=tekst1.find(tekst2); if (poz==string::npos) cout<<"Nie znalazlem\n"; else cout<<"Znalazlem\n"; return 0; } Nie znalazłem

28 find int main() { string tekst1("ABCDEF"); string::size_type poz1; cout << tekst1 << endl; poz1=tekst1.find("BCE"); cout << poz1 << endl; return 0; }

29 find int main() { string tekst1("ABCDEF"); string::size_type poz1; cout << tekst1 << endl; poz1=tekst1.find("BCE",0,2); cout << poz1 << endl; return 0; } 1

30 Wyszukiwanie size_type string::rfind(const char* co, size_type odkad=npos); size_type string::rfind(const string & co, size_type odkad=npos);, size_type string::rfind(const char* co, size_type odkad, size_type dlugosc); size_type string::rfind(char co, size_type odkad=npos);

31 find vs rfind AGH WIMiIP AGH AGH 11
int main() { string tekst1("AGH WIMiIP AGH"), tekst2("AGH"); string::size_type poz_p,poz_k; poz_p=tekst1.find(tekst2); poz_k=tekst1.rfind(tekst2); cout << tekst1 << endl; cout << tekst2 << endl; cout << poz_p << endl; cout << poz_k << endl; return 0; } AGH WIMiIP AGH AGH 11

32 Wyszukiwanie size_type string::find_first_of( ); size_type string::find_last_of( ); size_type string::find_first_not_of( ); size_type string::find_last_not_of( ); Każda z funkcji przyjmuje takie same zestawy argumentów jak funkcje find i rfind!

33 find_..._... abcdefghij aeiouy 8 1 9
int main() { string tekst("abcdefghij"), samogloski("aeiouy"); string::size_type poz1,poz2,poz3,poz4; poz1=tekst.find_first_of(samogloski); poz2=tekst.find_last_of(samogloski); poz3=tekst.find_first_not_of(samogloski); poz4=tekst.find_last_not_of(samogloski); cout << tekst << endl; cout << samogloski << endl; cout << poz1 << endl << poz2 << endl; cout << poz3 << endl << poz4 << endl; return 0; } abcdefghij aeiouy 8 1 9

34 erase oraz clear AGH WIMiIP AGH AGH AGH AGH
string &string::erase(size_type od=0, size_type do=npos); void string::clear(); int main() { string tekst("AGH WIMiIP AGH"); cout << tekst << endl; tekst.erase(4,6); tekst.erase(3); tekst.clear(); return 0; } AGH WIMiIP AGH AGH AGH AGH

35 Wstawianie string &string::insert(size_type gdzie, const string &co); string &string::insert(size_type gdzie, const string &co, size_type odkad, size_type ile); string &string::insert(size_type gdzie, const char *co); string &string::insert(size_type gdzie, const char *co, size_type ile); string &string::insert(size_type gdzie, size_type ile, char co);

36 insert int main() { string tekst("AGH WIMiIP AGH"); cout << tekst << endl; tekst.erase(4,6); tekst.insert(4,"WIMiIP"); return 0; } AGH WIMiIP AGH AGH AGH AGH WIMiIP AGH

37 Zastępowanie string &string::replace(size_type odkad, size_type ile, const string &czym); string &string::replace(size_type odkad, size_type ile, const string &czym, size_type odkad_brac, size_type ile_brac); string &string::replace(size_type odkad, size_type ile, const char *czym); string &string::replace(size_type odkad, size_type ile, const char *czym, size_type ile_brac); string &string::replace(size_type odkad, size_type ile, size_type ile_znakow, char znak);

38 replace int main() { string tekst("AGH WIMiIP"); cout << tekst << endl; tekst.replace(4,6,"WEAIiE"); return 0; } AGH WIMiIP AGH WEAIiE

39 replace int main() { string tekst(" "); cout << tekst << endl; tekst.replace(4,4,"abc",0,2); return 0; } 1234ab90

40 Zmiana string na C-string
const char *string::c_str();

41 Operatory porównania bool operator==( const string& lhs, const string& rhs ); bool operator==( const char* lhs, const string& rhs ); bool operator==( const string& lhs, const char* rhs ); Analogicznie przeładowane są operatory: != < > >= <=

42 Porównywanie int main() { string t[2]={"IMiIP","EAIiE"}; cout << (t[0]<t[1]) << endl; cout << (t[0]>t[1]) << endl; return 0; } 1

43 Porównywanie int string::compare(const string& str) const; int string::compare(const char* s) const; int string::compare(size_type pos1, size_type n1, const string& str) const; int string::compare(size_type pos1, size_type n1, const char* s) const; int string::compare(size_type pos1, size_type n1, const string& str, size_type pos2, size_type n2) const; int string::compare(size_type pos1, size_type n1, const char* s, size_type n2) const;

44 Porównywanie int main() { string t[2]={"IMiIP","EAIiE"}; cout << (t[0].compare(t[1])) << endl; cout << (t[0].compare(t[0])) << endl; cout << (t[1].compare(t[0])) << endl; return 0; } 1 -1

45 Porównywanie int main() { string t1("AB CD"),t2("CD AB"); cout<<t1.compare(t2)<<endl; cout<<t1.compare(3,2,t2)<<endl; cout<<t1.compare(3,2,"CD")<<endl; cout<<t1.compare(3,2,t2,0,2)<<endl; cout<<t1.compare(3,2,"CD",1)<<endl; return 0; } -1 AB CD CD AB -1 CD CD AB CD CD 1 CD C

46 swap void swap(string& lhs, string& rhs); void string::swap(string& str); int main() { string t[2]={"IMiIP","EAIiE"}; cout<<t[0]<<"\t"<<t[1]<<endl; t[0].swap(t[1]); swap(t[0],t[1]); return 0; } IMiIP EAIiE EAIiE IMiIP IMiIP EAIiE

47 int main() { int a,b; cin>>a; cout<<a<<endl; cin>>b; cout<<b<<endl; return 0; } 1 2 1 2

48 int main() { string t1,t2; cin>>t1; cout<<t1<<endl; cin>>t2; cout<<t2<<endl; return 0; } AGH WIMiIP AGH WIMiIP

49 getline istream& getline(istream& is, string& str); int main() { string t; getline(cin,t); cout << t << endl; return 0; } AGH WIMiIP AGH WIMiIP

50 getline istream& getline(istream& is, string& str, char delim); int main() { string t; getline(cin,t,'.'); cout << t << endl; return 0; } Ala ma kota. To kot Ali. Ala ma kota

51 Iterator iterator string::begin(); iterator string::end(); int main() { string tekst("AGH"); string::iterator i,j; i=tekst.begin(); j=tekst.end(); cout<<j-i<<endl; return 0; } 3

52 Iterator int main() { string tekst("AGH"); string::iterator it; it=tekst.begin(); for (int j=0; j<tekst.length(); j++, it++) cout<<*it; cout<<endl; return 0; } AGH

53 Iterator int main() { string tekst("AGH"); string::iterator i,j; i=tekst.begin(); j=tekst.end(); while (i!=j) cout<<*i; i++; } cout<<endl; return 0; AGH

54 Iterator int main() { string tekst(" "); string::iterator i,j; i=tekst.begin(); j=tekst.end(); while (i<j) cout<<*i; i+=2; } cout<<endl; return 0; 02468

55 Iterator do stałego obiektu
int main() { const string tekst(" "); string::const_iterator i; i=tekst.begin(); return 0; }

56 Stały iterator int main() { string tekst(" "); const string::iterator i=tekst.begin(); return 0; }

57 Prezentacja udostępniona na licencji Creative Commons: Uznanie autorstwa, Na tych samych warunkach 3.0. Pewne prawa zastrzeżone na rzecz autorów. Zezwala się na dowolne wykorzystywanie treści pod warunkiem wskazania autorów jako właścicieli praw do prezentacji oraz zachowania niniejszej informacji licencyjnej tak długo, jak tylko na utwory zależne będzie udzielana taka sama licencja. Tekst licencji dostępny jest na stronie:


Pobierz ppt "Podstawy informatyki 2012/2013"

Podobne prezentacje


Reklamy Google