PodstawyProgramowania W08, Studia

[ Pobierz całość w formacie PDF ]
//-->PODSTAWYPROGRAMOWANIAWykład 8PROWADZĄCY: dr inż. Marcin GłowackiE-Mail:Marcin.Glowacki@pwr.wroc.plPok.907 C-5Wrocław 2014WYKŁAD 8 (2014)Podstawy programowania 1(dr.inżMarcin Głowacki)28.TABLICEZNAKOWETeksty przechowuje się w tablicach typucharZapis:- pojedyncze znaki w pojedynczych apostrofach:‘Z’- wyrazy/zdania/teksty w cudzysłowie:”Tekstlub wyraz albo zdanie.”Definicja tablicy z wyrazemcharImie [] = ”MARCIN”; // ”MARCIN”alecharImie[] ={ ’M’,’A’,’R’,’C’,’I’,’N’,’\0’ };spowoduje utworzenie w pamięci tablicy (łańcucha) znaków:6 - znaków7 - elementówINDEKS[0]WARTOŚĆM[1]A[2]R[3]C[4]I[5]N[6]\0Zero:‘\0’ – znak specjalny oznaczający koniec tekstu w tablicyGdy zadajemy rozmiar to zawsze trzeba pamiętać o definiowaniu jednego znakuwięcej na zero.char Imie[12];//imię może mieć do 11 znaków – CZY MA KTOS DLUZSZE IMIE niż 11 znaków ?cout<< ”Podaj imie: ”;cin>>Imie;Drukowanie na ekranie:cout<<endl<<”Podales imie: ”<<Imie;lub przy użyciu wskaźników:int i=0;while(*(Imie+i)) {//dopóki nie napotka 0cout<<*(Imie+i)<<endl;//pamietamy – przesuwa się wskaznik o jedeni++;//(na kolejny element)}Efekt: MARCIN// Znak ‘0’ nie jest już wyświetlany, ponieważ następuje opuszczenie cyklu while()WYKŁAD 8 (2014)Podstawy programowania 1(dr.inżMarcin Głowacki)3-podejście klasyczne wywodzące się z języka CMożna skorzystać z gotowych funkcji przetwarzania tekstów z bibliotekstring.horazctype.hBibliotekastring.h#include <string.h>Przede wszystkim:size_tstrlen(char*str)– oblicza długość tekstu i zwraca (unsigned)orazintsizeof()- można skorzystać z uniwersalnego liczydła rozmiaruintstrcmp(char*str1, char *str2)– porównuje dwa tekstyintstrncmp(char*str1, char *str2, int n)- dla n = liczba znakow<0 gdy str1 jest przed str2=0 gdy str1=str2>0 gdy str1 jest po str2Wynik:charstrcpy(char*przeznaczenie, char *zrodlo)- kopiowanie dwóch tekstówcharstrncpy(char*przeznaczenie, char *zrodlo, int n)- dla n = liczba znakowcharstrcat(char*przeznaczenie, char *zrodlo)– kopiowanie przez dopisanie tekstu źródła nakoniec tekstu przeznaczeniacharstrncat(char*przeznaczenie, char *zrodlo, int n)- dla n = liczba znakówBibliotekactype.h#include <ctype.h>inttoupper(charc)–mała litera na dużą (duza bez zmian)inttolower(charc)–duża litera na małą (mala bez zmian)Konwersje liczbowo <=> tekstowe:intatoi(char*tekst)– ASCII do integerlongatol(char*tekst)– ASCII do longdoubleatof(char*tekst)– ASCII do doublePoza standardem ANSI (nie wszędzie dostępne):char *itoa(intN, char *buf, int podstawa)– zamienia N na tekst o podstawie i umieszcza w bufchar *ltoa(longN, char *buf, int podstawa)char *ultoa(unsignedlong N, char *buf, int podstawa)WYKŁAD 8 (2014)Podstawy programowania 1(dr.inżMarcin Głowacki)4#include <iostream>#include <string.h>#include <ctype.h>using namespace std;charzdanie[81];intwyrazy[40];//////////////////// FUNKCJE /////////////////////////////////intfnPodziel(charzdan[], int wyr[]){//zwraca liczbe wyrazowint liczba=0;//liczba znalezionych wyrazowif (zdan[0]=='\0')return (liczba); //kontrola czy zdanie pusteint fl_pocz=0;//fl_pocz (0-szuka pocz.) (1-szuka konca)int dlg=strlen(zdan);for(int i=0;i<dlg;i++)if ((zdan[i]!='\t')&&(zdan[i]!=' ')) {if (fl_pocz==0) {fl_pocz=1;wyr[liczba++]=i;}} else {zdan[i]='\0';fl_pocz=0;}return (liczba);}int main(){cout<<"Wprowadz swoje zdanie:";cin.getline(zdanie,sizeof(zdanie));cout<<"To jest twoje zdanie: "<<zdanie<<endl;int liczba=fnPodziel(zdanie,wyrazy);for (int i=0;i<liczba;i++)cout<<"Wyraz "<<i+1<<" na pozycji "<<wyrazy[i]<<" to "<<&(zdanie[wyrazy[i]])<<endl;return 0;}WYKŁAD 8 (2014)Podstawy programowania 1(dr.inżMarcin Głowacki)5Funkcja cin.getline()Potrzebna jest ochrona przez wpisywaniem zbyt długich tekstów przez użytkownika, cogrozi przepełnieniem tablicy, a w dalszej konsekwencji naruszeniem integralności programu.Funkcja cin.getline(…) w drugim argumencie umożliwia ustawienie liczby znakówwczytywanych z bufora klawiatury. Jeśli podczas wczytywania znaków cin.getline nie znajdzieogranicznika w postaci znaku końca linii (‘\n’), który jest domyślnym sygnałem do zakończeniawczytywania, a zostanie przekroczony deklarowany limit – wtedy będzie to traktowane jako błądi ustawione zostaną specjalne flagi. Na podstawie wartości zwracanej przez funkcję cin.fail()użytkownik może sprawdzić czy wystąpił błąd (jeśli zwracana jest PRAWDA) i wtedy powinienwykonać czynności zmierzające do przywrócenia stanu normalnego funkcji poprzez skasowaniebłędu i wyczyszczenie flag stanu funkcją cin.clear(). Dodatkowo należy wyczyścić danepozostające w buforze, co można zrobić funkcją cin.ignore(…), chyba że są to dane interesująceto należy jest odczytać z bufora i zapisać do tablicy. Dla pewnego działania funkcji cin.ignore()można ustawić limit długości w postaci maksymalnego rozmiaru buforów wejściowychmożliwych do ustawienia w danym środowisku co zwraca nam:numeric_limits<streamsize>::max(). Żeby z niej skorzystać należy dołączyć plik nagłówkowy<limits>.Przykład: ochrona przed błędnym wprowadzaniem zbyt długich tekstów#include <iostream>#include <string.h>#include <limits>using namespace std;int main(){//char takst1[]= "ZORRO";char tekst[]={'Z','O','R','R','O','!','\0'};cout << tekst<< endl;cin.getline(tekst,sizeof(tekst));cout << tekst << endl;if(cin.fail()){cin.clear();cin.ignore(numeric_limits<streamsize>::max(),'\n');}cin.getline(tekst,sizeof(tekst));cout << tekst << endl;if(cin.fail()){cin.clear();cin.ignore(numeric_limits<streamsize>::max(),'\n');}cout<<numeric_limits<streamsize>::max()<<endl;return 0;} [ Pobierz całość w formacie PDF ]

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • tlumiki.pev.pl