10 c++ siruri de caractere adrian runceanu · 2016. 11. 21. · siruri de caractere. copyright@...

49
Programarea calculatoarelor # 10 Adrian Runceanu www.runceanu.ro/adrian 2016 C++ Siruri de caractere

Upload: others

Post on 01-Feb-2021

12 views

Category:

Documents


0 download

TRANSCRIPT

  • Programarea calculatoarelor

    # 10

    Adrian Runceanuwww.runceanu.ro/adrian

    2016

    C++Siruri de caractere

  • [email protected]

    Curs 10

    21.11.2016 Programarea calculatoarelor 2

  • [email protected]

    Capitolul 8. Şiruri de caractere

    8.1. Formă generală. Declarare8.2. Funcţii specifice şirurilor de caractere8.3. Probleme cu şiruri de caractere

    21.11.2016 Programarea calculatoarelor 3

  • [email protected]

    8.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 informaţii de tip şir de caractere.

    • Cu toate că limbajul C/C++ nu conţine un tip de datespecial pentru şiruri de caractere aşa cum arelimbajul Pascal, se pot utiliza tablouriunidimensionale de caractere.

    21.11.2016 Programarea calculatoarelor 4

  • [email protected]

    8.1. Formă generală. Declarare

    Declararea unui tablou de caractere se face astfel:

    21.11.2016 Programarea calculatoarelor 5

    char nume_tablou[dimensiune_maximă];

    Exemple:

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

  • [email protected]

    8.1. Formă generală. Declarare

    • Pentru a specifica sfârşitul şirului de caractere,după ultimul caracter se adaugă un octet cuvaloarea 0 ( caracterul '\0' ).

    • Dimensiunea declarată pentru un tablou deşiruri de caractere trebuie să fie cu o unitatemai mare pentru ca pe ultima poziţie să sepoată pune şi valoarea '\0' = terminatorul deşir.

    21.11.2016 Programarea calculatoarelor 6

  • [email protected]

    8.1. Formă generală. Declarare

    Reprezentarea internă a unui şir de caractere

    sir[0] sir[33]=”Programarea calculatoarelor”Ultimi octeţi sunt nefolosiţi.

    21.11.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

  • [email protected]

    8.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.

    • Totuşi compilatorul C/C++ nu adaugă automatterminatorul NULL, decât în cazul folosirii funcţiilorpredefinite fgets() şi gets() (functii de citire din fisieresau de la tastatura), iar în celelalte cazuri estenecesar ca programatorul să adauge terminatorul deşir atunci când doreşte acest lucru, pentru a lucra cuşirurile de caractere.

    21.11.2016 Programarea calculatoarelor 8

  • [email protected]

    8.1. Formă generală. DeclarareExemplu:

    Următorul program declară un şir de caractere de 256 deelemente şi atribuie primelor 26 de locaţii libere literele mari alealfabetului:

    #includeint main(){

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

  • [email protected]

    Capitolul 8. Şiruri de caractere

    8.1. Formă generală. Declarare8.2. Funcţii specifice şirurilor de caractere8.3. Probleme cu şiruri de caractere

    21.11.2016 Programarea calculatoarelor 10

  • [email protected]

    8.2. Funcţii specifice şirurilor de caractere

    În biblioteca limbajului C++ există câteva funcţiispecifice şirurilor de caractere:

    în fişierul standard de intrare / ieşire – stdio.h,avem funcţiile gets() şi puts().

    în fişierul string.h, avem mai multe funcţiispecifice prelucrării șirurilor, funcții pe care levoi prezenta în continuare.

    21.11.2016 Programarea calculatoarelor 11

  • [email protected]

    8.2. Funcţii specifice şirurilor de caractere

    Pentru citirea sirurilor de caractere carecontin spatii se poate folosi metoda getline afuncției cin:

    Exemplu:

    char variabila_sir[120];

    cin.getline(variabila_sir, 120);

    21.11.2016 Programarea calculatoarelor 12

    cin.getline(variabila_sir, dimensiune_maxima);

  • [email protected]

    8.2. Funcţii specifice şirurilor de caractere

    Funcţiile pentru operaţii cu şiruri ce segăsesc în header-ul .

    Returnează un număr întreg ce reprezintălungimea unui şir de caractere, fără a număraterminatorul de şir.

    Exemplu:

    cout

  • [email protected]

    8.2. Funcţii specifice şirurilor de caractere

    Funcţia compară cele două şiruri date caargument şi returnează o valoare întreagăegală cu diferenţa dintre codurile ASCII aleprimelor caractere care nu coincid.

    Exemplu:

    cout

  • [email protected]

    8.2. Funcţii specifice şirurilor de caractere

    Funcţia copiază şirul sursă în şirul destinaţie.Nota:

    Pentru a fi posibilă copierea, lungimea şiruluidestinaţie trebuie să fie mai mare sau egală cu cea aşirului sursă, altfel pot aparea erori grave.

    Exemplu:

    char sir[20];

    cout

  • [email protected]

    8.2. Funcţii specifice şirurilor de caractere

    Funcţia concatenează cele două şiruri: şirulsursă este adăugat la sfârşitul şirului destinaţie.

    Tabloul care conţine şirul destinaţie trebuie săaibă suficiente elemente.

    Exemplu:

    char sir[]="carte";

    cout

  • [email protected]

    8.2. Funcţii 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

  • [email protected]

    8.2. Funcţii 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

  • [email protected]

    8.2. Funcţii 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

  • [email protected]

    8.2. Funcţii specifice şirurilor de caractereExemplu 1:#include #include

    int main(){

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

  • [email protected]

    8.2. Funcţii specifice şirurilor de caractere

    cout

  • [email protected]

    8.2. Funcţii specifice şirurilor de caractere

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

  • [email protected]

    8.2. Funcţii specifice şirurilor de caractere

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

    cout

  • [email protected]

    8.2. Funcţii specifice şirurilor de caractere

    cout

  • [email protected]

    8.2. Funcţii specifice şirurilor de caractere

    Executia programului:

    21.11.2016 Programarea calculatoarelor 25

  • [email protected]

    8.2. Funcţii specifice şirurilor de caractere

    Exemplu 2:

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

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

  • [email protected]

    8.2. Funcţii specifice şirurilor de caractere

    cout

  • [email protected]

    8.2. Funcţii specifice şirurilor de caractere

    Executia programului:

    21.11.2016 Programarea calculatoarelor 28

  • [email protected]

    8.2. Funcţii specifice şirurilor de caractere

    În fişierul există câteva funcţiicare prelucrează şirurile de caractere.

    Acestea sunt funcţiile de conversie dintr-unnumăr într-un şir de caractere şi invers.

    21.11.2016 Programarea calculatoarelor 29

  • [email protected]

    8.2. Funcţii specifice şirurilor de caractere

    În programul următor vor fi exemplicate funcţiilede conversie din şiruri de caractere în numere:

    21.11.2016 Programarea calculatoarelor 30

    Funcţie la ce foloseşteatof converteşte un şir de caractere într-un număr real simplă precizieatoi converteşte un şir de caractere într-un număr întregatol converteşte un şir de caractere într-un număr întreg de tip longstrtod converteşte un şir de caractere într-un număr real dublă preciziestrtol converteşte un şir de caractere într-un număr de tip long

  • [email protected]

    8.2. Funcţii 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

  • [email protected]

    8.2. Funcţii specifice şirurilor de caractere

    În programul următor vor fi exemplicatefuncţiile de conversie din numere în şiruri decaractere:

    21.11.2016 Programarea calculatoarelor 32

    Funcţie la ce foloseşteitoa converteşte un număr întreg într-un şir de caractereftoa converteşte un număr real simplă precizie într-un şir de caractereultoa converteşte un număr de tip long unsigned într-un şir de caractere

  • [email protected]

    8.2. Funcţii specifice şirurilor de caractere#include#includeint main(){

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

  • [email protected]

    8.2. Funcţii specifice şirurilor de caractere

    Executia programului:

    21.11.2016 Programarea calculatoarelor 34

  • [email protected]

    Capitolul 8. Şiruri de caractere

    8.1. Formă generală. Declarare8.2. Funcţii specifice şirurilor de caractere8.3. Probleme cu şiruri de caractere

    21.11.2016 Programarea calculatoarelor 35

  • [email protected]

    8.3. Probleme cu şiruri de caractere

    Problema 1:Enunţ:

    Să se afişeze numărul de vocale dintr-un textscris cu litere mici, memorat intr-o variabilă de tipșir de caractere.

    Exemplu:

    Date de intrare: Programarea calculatoarelor

    Date de ieșire: Exista 12 vocale in text

    21.11.2016 Programarea calculatoarelor 36

  • [email protected]

    8.3. Probleme cu şiruri de caractere

    #include

    #include

    int main()

    {

    char text[100];

    char vocale[] = "aeiou";

    int contor = 0;

    cout

  • [email protected]

    8.3. Probleme cu şiruri de caractere

    for (int i=0; i

  • [email protected]

    8.3. Probleme cu şiruri de caractere

    Problema 2:Enunţ:

    Să se afişeze cu litere mari un text dat, demaxim 255 caractere.

    Exemplu:

    Date de intrare text: liMBajUl c++

    Date de ieşire LIMBAJUL C++

    21.11.2016 Programarea calculatoarelor 39

  • [email protected]

    8.3. Probleme cu şiruri de caractere#include

    int main()

    {

    char sir[255];

    cout

  • [email protected]

    8.3. Probleme cu şiruri de caractere

    Problema 3:Enunţ:

    Se citește un șir de caractere. Să se afișezelitera cea mai des întâlnită.

    Exemplu:

    Date de intrare text: carte de informatica siprogramare

    Date de ieşire: a apare de 5 ori

    21.11.2016 Programarea calculatoarelor 41

  • [email protected]

    8.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

  • [email protected]

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

    max=frecv[c];

    carac_max=c;

    }

    }

    cout

  • [email protected]

    8.3. Probleme cu şiruri de caractere

    21.11.2016 Programarea calculatoarelor 44

  • [email protected]

    Probleme propuse spre rezolvate – șiruri de caractere

    1. Să se afișeze toate prefixele și sufixele unui cuvântcitit de la tastatură.Exemplu:Date de intrare: informaticaDate de ieşire:

    21.11.2016 Programarea calculatoarelor 45

    iininfinfoinforinforminformainformatinformatiinformaticinformatica

    acaicaticaaticamaticarmaticaormaticaformaticanformaticainformatica

  • [email protected]

    Probleme propuse spre rezolvate – șiruri de caractere

    2. Se citește de la tastatură un caracter c și un text demaxim 100 de carectere. Afișați de câte 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 ieşire:

    21.11.2016 Programarea calculatoarelor 46

    Litera ‘e’ apare de 5 ori

  • [email protected]

    Probleme propuse spre rezolvate – șiruri de caractere

    3. Se citește de la tastatură un șir de maxim 100 decarectere format numai din litere și cifre. Afișați numărulliterelor mari, numărul literelor mici și numărulcaracterelor de tip cifră din textul dat.

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

    Date de ieşire:

    21.11.2016 Programarea calculatoarelor 47

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

  • [email protected]

    Pentru alte informații teoretice și aplicative legatede acest capitol se recomandă următoarele referințebibliografice:1. Adrian Runceanu, Mihaela Runceanu, Noțiuni deprogramare în limbajul C++, Editura AcademicaBrâncuși, Târgu-Jiu, 2012 (www.utgjiu.ro/editura)2. Adrian Runceanu, Programarea şi utilizareacalculatoarelor, Editura Academica Brâncuși, Târgu-Jiu,2003 (www.utgjiu.ro/editura)3. Octavian Dogaru, C++ - teorie şi practică, volumul I,Editura Mirton, Timişoara, 2004 (www.utgjiu.ro/editura)

    21.11.2016 Programarea calculatoarelor 48

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

  • [email protected]

    Întrebări?

    21.11.2016 Programarea calculatoarelor 49