Top Banner

Click here to load reader

49

Lecture5 - PC

Jan 15, 2017

ReportDownload

Engineering

  • Programarea calculatoarelor

    # 5

    Adrian Runceanuwww.runceanu.ro/adrian

    2016

    C++Siruri de caractere

  • copyright@www.adrian.runceanu.ro

    Curs 5

    02.12.2016 Programarea calculatoarelor 2

  • copyright@www.adrian.runceanu.ro

    5. iruri de caractere

    5.1. Form general. Declarare5.2. Funcii specifice irurilor de caractere5.3. Probleme cu iruri de caractere

    02.12.2016 Programarea calculatoarelor 3

  • copyright@www.adrian.runceanu.ro

    5.1. Form general. Declarare

    Datele care se reprezint sub form de iruri decaractere au o larg aplicabilitate n programareacalculatoarelor, indiferent de limbajul folosit.

    Astfel i n limbajul C/C++ se pot memora iprelucra informaii de tip ir de caractere.

    Cu toate c limbajul C/C++ nu conine un tip de datespecial pentru iruri de caractere aa cum arelimbajul Pascal, se pot utiliza tablouriunidimensionale de caractere.

    02.12.2016 Programarea calculatoarelor 4

  • copyright@www.adrian.runceanu.ro

    5.1. Form general. Declarare

    Declararea unui tablou de caractere se face astfel:

    02.12.2016 Programarea calculatoarelor 5

    char nume_tablou[dimensiune_maxim];

    Exemple:

    char sir[20]; // tablou de 20 de caracterechar t[10]; // tablou de 10 caractere

  • copyright@www.adrian.runceanu.ro

    5.1. Form general. Declarare

    Pentru a specifica sfritul irului de caractere,dup ultimul caracter se adaug un octet cuvaloarea 0 ( caracterul '\0' ).

    Dimensiunea declarat pentru un tablou deiruri de caractere trebuie s fie cu o unitatemai mare pentru ca pe ultima poziie s sepoat pune i valoarea '\0' = terminatorul deir.

    02.12.2016 Programarea calculatoarelor 6

  • copyright@www.adrian.runceanu.ro

    5.1. Form general. Declarare

    Reprezentarea intern a unui ir de caractere

    sir[0] sir[33]=Programarea calculatoarelorUltimi octei sunt nefolosii.

    02.12.2016 Programarea calculatoarelor 7

    char sir[33]="Programarea calculatoarelor";

    P r o g r a m a r e a c a l c u l a t o a r e l o r \0

  • copyright@www.adrian.runceanu.ro

    5.1. Form general. Declarare

    n limbajul C/C++, un ir de caractere este un tablouunidimensional cu elemente de tip caracter i care setermin cu NULL.

    Totui compilatorul C/C++ nu adaug automatterminatorul NULL, dect n cazul folosirii funciilorpredefinite fgets() i gets() (functii de citire din fisieresau de la tastatura), iar n celelalte cazuri estenecesar ca programatorul s adauge terminatorul deir atunci cnd dorete acest lucru, pentru a lucra cuirurile de caractere.

    02.12.2016 Programarea calculatoarelor 8

  • copyright@www.adrian.runceanu.ro

    5.1. Form general. DeclarareExemplu:

    Urmtorul program declar un ir de caractere de 256 deelemente i atribuie primelor 26 de locaii libere literele mari alealfabetului:

    #includeint main(){

    char sir[256];int i;for(i=0;i

  • copyright@www.adrian.runceanu.ro

    5. iruri de caractere

    5.1. Form general. Declarare5.2. Funcii specifice irurilor de caractere5.3. Probleme cu iruri de caractere

    02.12.2016 Programarea calculatoarelor 10

  • copyright@www.adrian.runceanu.ro

    5.2. Funcii specifice irurilor de caractere

    n biblioteca limbajului C++ exist cteva funciispecifice irurilor de caractere:

    n fiierul standard de intrare / ieire stdio.h,avem funciile gets() i puts().

    n fiierul string.h, avem mai multe funciispecifice prelucrrii irurilor, funcii pe care levoi prezenta n continuare.

    02.12.2016 Programarea calculatoarelor 11

  • copyright@www.adrian.runceanu.ro

    5.2. Funcii specifice irurilor de caractere

    Pentru citirea sirurilor de caractere carecontin spatii se poate folosi metoda getline afunciei cin:

    Exemplu:

    char variabila_sir[120];

    cin.getline(variabila_sir, 120);

    02.12.2016 Programarea calculatoarelor 12

    cin.getline(variabila_sir, dimensiune_maxima);

  • copyright@www.adrian.runceanu.ro

    5.2. Funcii specifice irurilor de caractere

    Funciile pentru operaii cu iruri ce segsesc n header-ul .

    Returneaz un numr ntreg ce reprezintlungimea unui ir de caractere, fr a numraterminatorul de ir.

    Exemplu:

    cout

  • copyright@www.adrian.runceanu.ro

    5.2. Funcii specifice irurilor de caractere

    Funcia compar cele dou iruri date caargument i returneaz o valoare ntreagegal cu diferena dintre codurile ASCII aleprimelor caractere care nu coincid.

    Exemplu:

    cout

  • copyright@www.adrian.runceanu.ro

    5.2. Funcii specifice irurilor de caractere

    Funcia copiaz irul surs n irul destinaie.Nota:

    Pentru a fi posibil copierea, lungimea iruluidestinaie trebuie s fie mai mare sau egal cu cea airului surs, altfel pot aparea erori grave.

    Exemplu:

    char sir[20];

    cout

  • copyright@www.adrian.runceanu.ro

    5.2. Funcii specifice irurilor de caractere

    Funcia concateneaz cele dou iruri: irulsurs este adugat la sfritul irului destinaie.

    Tabloul care conine irul destinaie trebuie saib suficiente elemente.

    Exemplu:

    char sir[]="carte";

    cout

  • copyright@www.adrian.runceanu.ro

    5.2. Funcii specifice irurilor de caractere

    Returneaza o valoare pozitiva daca uncaracter apare intr-un sir, 0 in caz contrar.

    Exemplu:

    char sir[]="exemplu de sir", c=i;

    if (strchr(sir, c)) cout

  • copyright@www.adrian.runceanu.ro

    5.2. Funcii specifice irurilor de caractere

    Returneaza o valoare pozitiva daca unsir apare intr-un alt sir, 0 in caz contrar.

    Exemplu:

    char sir1="primul sir", sir2="sir";

    if (strstr(sir1,sir2)) cout

  • copyright@www.adrian.runceanu.ro

    5.2. Funcii specifice irurilor de caractere

    Aloc memorie la o alt adres i copiaz n acea memorie irul s. Intoarce adresa noului ir

    Exemplu:char *s="sir initial;char *t=strdup(s);cout

  • copyright@www.adrian.runceanu.ro

    5.2. Funcii specifice irurilor de caractereExemplu 1:#include #include

    int main(){

    char sir1[] = "abcd", sir2[] = "abcde";cout

  • copyright@www.adrian.runceanu.ro

    5.2. Funcii specifice irurilor de caractere

    cout

  • copyright@www.adrian.runceanu.ro

    5.2. Funcii specifice irurilor de caractere

    char str1[20]="hello";char str2[20]="goodbye";char str3[20]="";int diferenta, lungime;cout

  • copyright@www.adrian.runceanu.ro

    5.2. Funcii specifice irurilor de caractere

    diferenta = strcmp(str1, str2);if (diferenta == 0)

    cout

  • copyright@www.adrian.runceanu.ro

    5.2. Funcii specifice irurilor de caractere

    cout

  • copyright@www.adrian.runceanu.ro

    5.2. Funcii specifice irurilor de caractere

    Executia programului:

    02.12.2016 Programarea calculatoarelor 25

  • copyright@www.adrian.runceanu.ro

    5.2. Funcii specifice irurilor de caractere

    Exemplu 2:

    Verificati daca un nume apare intr-un sir.#include #include int main(){

    char nume[10],sir[100];cout

  • copyright@www.adrian.runceanu.ro

    5.2. Funcii specifice irurilor de caractere

    cout

  • copyright@www.adrian.runceanu.ro

    5.2. Funcii specifice irurilor de caractere

    Executia programului:

    02.12.2016 Programarea calculatoarelor 28

  • copyright@www.adrian.runceanu.ro

    5.2. Funcii specifice irurilor de caractere

    n fiierul exist cteva funciicare prelucreaz irurile de caractere.

    Acestea sunt funciile de conversie dintr-unnumr ntr-un ir de caractere i invers.

    02.12.2016 Programarea calculatoarelor 29

  • copyright@www.adrian.runceanu.ro

    5.2. Funcii specifice irurilor de caractere

    n programul urmtor vor fi exemplicate funciilede conversie din iruri de caractere n numere:

    02.12.2016 Programarea calculatoarelor 30

    Funcie la ce foloseteatof convertete un ir de caractere ntr-un numr real simpl precizieatoi convertete un ir de caractere ntr-un numr ntregatol convertete un ir de caractere ntr-un numr ntreg de tip longstrtod convertete un ir de caractere ntr-un numr real dubl preciziestrtol convertete un ir de caractere ntr-un numr de tip long

  • copyright@www.adrian.runceanu.ro

    5.2. Funcii specifice irurilor de caractere#include#includeint main(){

    int numar_int;float numar_real;long numar;numar_int = atoi("6789");numar_real = atof("12.345");numar = atol("1234567890L");cout

  • copyright@www.adrian.runceanu.ro

    5.2. Funcii specifice irurilor de caractere

    n programul urmtor vor fi exemplicatefunciile de conversie din numere n iruri decaractere:

    02.12.2016 Programarea calculatoarelor 32

    Funcie la ce foloseteitoa convertete un numr ntreg ntr-un ir de caractereftoa convertete un numr real simpl precizie ntr-un ir de caractereultoa convertete un numr de tip long unsigned ntr-un ir de caractere

  • copyright@www.adrian.runceanu.ro

    5.2. Funcii specifice irurilor de caractere#include#includeint main(){

    int numar_int = 6789;long numar = 1234567890L;char sir[25];itoa(numar_int, sir, 10);cout

  • copyright@www.adrian.runceanu.ro

    5.2. Funcii specifice irurilor de caractere

    Executia programului:

    02.12.2016 Programarea calculatoarelor 34

  • copyright@www.adrian.runceanu.ro

    5. iruri de caractere

    5.1. Form general. Declarare5.2. Funcii specifice irurilor de caractere5.3. Probleme cu iruri de caractere

    02.12.2016 Programarea calculatoarelor 35

  • copyright@www.adrian.runceanu.ro

    5.3. Probleme cu iruri de caractere

    Problema 1:Enun:

    S se afieze numrul de vocale dintr-un textscris cu litere mici, memorat intr-o variabil de tipir de caractere.

    Exemplu:

    Date de intrare: Programarea calculatoarelor

    Date de ieire: Exista 12 vocale in text

    02.12.2016 Programarea calculatoarelor 36

  • copyright@www.adrian.runceanu.ro

    5.3. Probleme cu iruri de caractere

    #include

    #include

    int main()

    {

    char text[100];

    char vocale[] = "aeiou";

    int contor = 0;

    cout

  • copyright@www.adrian.runceanu.ro

    5.3. Probleme cu iruri de caractere

    for (int i=0; i

  • copyright@www.adrian.runceanu.ro

    5.3. Probleme cu iruri de caractere

    Problema 2:Enun:

    S se afieze cu litere mari un text dat, demaxim 255 caractere.

    Exemplu:

    Date de intrare text: liMBajUl c++

    Date de ieire LIMBAJUL C++

    02.12.2016 Programarea calculatoarelor 39

  • copyright@www.adrian.runceanu.ro

    5.3. Probleme cu iruri de caractere#include

    int main()

    {

    char sir[255];

    cout

  • copyright@www.adrian.runceanu.ro

    5.3. Probleme cu iruri de caractere

    Problema 3:Enun:

    Se citete un ir de caractere. S se afiezelitera cea mai des ntlnit.

    Exemplu:

    Date de intrare text: carte de informatica siprogramare

    Date de ieire: a apare de 5 ori

    02.12.2016 Programarea calculatoarelor 41

  • copyright@www.adrian.runceanu.ro

    5.3. Probleme cu iruri de caractere

    #include

    #include

    int main()

    {

    char sir[1000], carac_max, c;

    int i, frecv[256], max=0; // frecv - vector de frecvente

    cout

  • copyright@www.adrian.runceanu.ro

    5.3. Probleme cu iruri de caracterefor (i=0;imax){

    max=frecv[c];

    carac_max=c;

    }

    }

    cout

  • copyright@www.adrian.runceanu.ro

    5.3. Probleme cu iruri de caractere

    02.12.2016 Programarea calculatoarelor 44

  • copyright@www.adrian.runceanu.ro

    Probleme propuse spre rezolvate iruri de caractere

    1. S se afieze toate prefixele i sufixele unui cuvntcitit de la tastatur.Exemplu:Date de intrare: informaticaDate de ieire:

    02.12.2016 Programarea calculatoarelor 45

    iininfinfoinforinforminformainformatinformatiinformaticinformatica

    acaicaticaaticamaticarmaticaormaticaformaticanformaticainformatica

  • copyright@www.adrian.runceanu.ro

    Probleme propuse spre rezolvate iruri de caractere

    2. Se citete de la tastatur un caracter c i un text demaxim 100 de carectere. Afiai de cte ori aparecaracterul c n cadrul textului. Literele mari se vorconsidera diferite de literele mici.

    Exemplu:Date de intrare:Acesta este un simplu exempluCaracterul e

    Date de ieire:

    02.12.2016 Programarea calculatoarelor 46

    Litera e apare de 5 ori

  • copyright@www.adrian.runceanu.ro

    Probleme propuse spre rezolvate iruri de caractere

    3. Se citete de la tastatur un ir de maxim 100 decarectere format numai din litere i cifre. Afiai numrulliterelor mari, numrul literelor mici i numrulcaracterelor de tip cifr din textul dat.

    Exemplu:Date de intrare:S-a nascut la Targu Jiu in 1968 pe 21 martie

    Date de ieire:

    02.12.2016 Programarea calculatoarelor 47

    Se gasesc 25 de litere mici, 2 litere mari si 6 cifre

  • copyright@www.adrian.runceanu.ro

    Pentru alte informaii teoretice i aplicative legatede acest capitol se recomand urmtoarele referinebibliografice:1. Adrian Runceanu, Mihaela Runceanu, Noiuni deprogramare n limbajul C++, Editura AcademicaBrncui, Trgu-Jiu, 2012 (www.utgjiu.ro/editura)2. Adrian Runceanu, Programarea i utilizareacalculatoarelor, Editura Academica Brncui, Trgu-Jiu,2003 (www.utgjiu.ro/editura)3. Octavian Dogaru, C++ - teorie i practic, volumul I,Editura Mirton, Timioara, 2004 (www.utgjiu.ro/editura)

    02.12.2016 Programarea calculatoarelor 48

    http://www.utgjiu.ro/editurahttp://www.utgjiu.ro/editurahttp://www.utgjiu.ro/editura

  • copyright@www.adrian.runceanu.ro

    First, solve the problem. Then, write the code.

    - John Johnson

    02.12.2016 Programarea Calculatoarelor - curs 49

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.