Prelucrarea sirurilor de caractere - PowerPoint PPT Presentation

1 / 35
About This Presentation
Title:

Prelucrarea sirurilor de caractere

Description:

Prelucrarea irurilor de caractere Programarea calculatoarelor i limbaje de programare II Capitolul 11 – PowerPoint PPT presentation

Number of Views:59
Avg rating:3.0/5.0
Slides: 36
Provided by: Angel231
Category:

less

Transcript and Presenter's Notes

Title: Prelucrarea sirurilor de caractere


1
Prelucrarea sirurilor de caractere
  • Programarea calculatoarelor si limbaje de
    programare II
  • Capitolul 11

2
Obiective
  • Folosirea clasei string din biblioteca standard
    C pentru tratarea sirurilor de caractere ca
    obiecte
  • Întelegerea modului în care se realizeaza diverse
    operatii asupra obiectelor de tip string
  • Folosirea iteratorilor string
  • Realizarea operatiilor de intrare si iesire în
    memorie cu string-uri

3
Introducere
  • Clasa template basic_string
  • Ofera operatii tipice pentru prelucrare sirurilor
    de caractere copierea, cautarea etc.
  • Definitia acestui template si toate celelalte
    functionalitati sunt definite în namespace std
  • În namespace std se gaseste si declaratia
  • typedef basic_stringltchargt string

4
Introducere
  • Constructori pentru crearea obiectelor de tip
    string
  • string s1("Hello")
  • string s1(8, x)
  • Obiectele de tip string nu trebuie sa contina
    caracterul NULL pe ultima pozitie
  • Clasa string mai dispune de un constructor
    implicit si de un constructor de copiere

5
Sumar
  • Asignarea si concatenarea string-urilor
  • Subsiruri
  • Caracteristicile obiectelor string
  • Gasirea caracterelor într-un string
  • Înlocuirea caracterelor dintr-un string
  • Inserarea caracterelor într-un string
  • Iteratori
  • Procesarea stream-urilor string

6
Asignarea si concatenarea string-urilor
  • ...
  • include ltstringgt
  • using stdstring
  • int main()
  • string s1("cat"), s2, s3
  • s2 s1
  • s3.assign(s1)
  • cout ltlt "s1 " ltlt s1 ltlt "\ns2 " ltlt s2
  • ltlt "\ns3 " ltlt s3 ltlt "\n\n"
  • ...

Pentru a putea folosi clasa string trebuie inclus
în program fisierul header ltstringgt
Operatii de asignare
s1 cat s2 cat s3 cat
7
Asignarea si concatenarea string-urilor
  • ...
  • int main()
  • ...
  • //folosirea operatorului
  • s20 s32 'r'
  • cout ltlt "Dupa modificarea lui s2 si s3\n"
  • ltlt "s1 " ltlt s1 ltlt "\ns2 " ltlt s2 ltlt
    "\ns3 "
  • //functia membra at()
  • int len s3.length()
  • for(int x 0 x lt len x)
  • cout ltlt s3.at(x)
  • ...

Dupa modificarea lui s2 si s3 s1 cat s2
rat s3 car
8
Asignarea si concatenarea string-urilor
  • ...
  • int main()
  • ...
  • //concatenarea
  • string s4(s1 "apult"), s5
  • s3 "pet"
  • s1.append("acomb")
  • s5.append(s1, 4, s1.size())
  • cout ltlt "\n\nDupa concatenare\n" ltlt "s1 " ltlt
    s1
  • ltlt "\ns2 " ltlt s2 ltlt "\ns3 " ltlt s3
  • ltlt "\ns4 " ltlt s4 ltlt "\ns5 " ltlt s5 ltlt
    endl

Se creeaza cuvantul "catapult"
Se creeaza cuvantul "carpet"
Se creeaza cuvantul "catacomb"
Dupa concatenare s1 catacomb s2 rat s3
carpet s4 catapult s5 comb
9
Sumar
  • Asignarea si concatenarea string-urilor
  • Subsiruri
  • Caracteristicile obiectelor string
  • Gasirea caracterelor într-un string
  • Înlocuirea caracterelor dintr-un string
  • Inserarea caracterelor într-un string
  • Iteratori
  • Procesarea stream-urilor string

10
Subsiruri
  • ...
  • include ltstringgt
  • using stdstring
  • int main()
  • string s("The airplane flew away.")
  • cout ltlt s.substr(7, 5) ltlt endl
  • return 0

Întoarce subsirul "plane" care începe la pozitia
7 si are 5 elemente
plane
11
Sumar
  • Asignarea si concatenarea string-urilor
  • Subsiruri
  • Caracteristicile obiectelor string
  • Gasirea caracterelor într-un string
  • Înlocuirea caracterelor dintr-un string
  • Inserarea caracterelor într-un string
  • Iteratori
  • Procesarea stream-urilor string

12
Caracteristicile obiectelor string
  • Clasa string are functii care dau informatii,
    între altele, despre
  • lungimea length(), size()
  • lungimea maxima max_size()
  • capacitatea sirului capacity()
  • Lungimea unui string este numarul de caractere
    stocate la un moment dat în obiect
  • Capacitatea este numarul total de elemente care
    pot fi stocate fara cresterea memoriei alocate
    sirului
  • Lungimea maxima este cea mai mare dimensiune
    posibila a unui obiect de tip string

13
Caracteristicile obiectelor string
  • ...
  • int main ()
  • string s
  • cout ltlt "Statisticile inainte de input\n"
  • printStats(s)
  • ...
  • void printStats(const string str)
  • cout ltlt "capacitatea " ltlt str.capacity()
  • ltlt "\nlungimea maxima " ltlt str.max_size()
  • ltlt "\nlungimea " ltlt str.size()
  • ltlt "\nsir vid? " ltlt (str.empty() ? "da"
    "nu")

Statisticile inainte de input capacitatea
0 lungimea maxima 1073741820 lungimea 0 sir
vid? da
14
Caracteristicile obiectelor string
  • ...
  • int main ()
  • ...
  • cout ltlt "\n\nIntroduceti un sir de caractere
    "
  • cin gtgt s
  • cout ltlt "Sirul introdus este " ltlt s
  • cout ltlt "\nStatisticile dupa input\n"
  • printStats(s)
  • ...

Introduceti un sir de caractere tomato
soup Sirul introdus este tomato Statisticile
dupa input capacitatea 6 lungimea maxima
1073741820 lungimea 6 sir vid? nu
15
Caracteristicile obiectelor string
  • ...
  • int main ()
  • ...
  • s.resize(s.length()10)
  • cout ltlt "\n\nStatisticile dupa resize cu
    (length10)\n"
  • printStats(s)
  • cout ltlt endl

Statisticile dupa resize cu (length10) capacitat
ea 16 lungimea maxima 1073741820 lungimea
16 sir vid? nu
16
Sumar
  • Asignarea si concatenarea string-urilor
  • Subsiruri
  • Caracteristicile obiectelor string
  • Gasirea caracterelor într-un string
  • Înlocuirea caracterelor dintr-un string
  • Inserarea caracterelor într-un string
  • Iteratori
  • Procesarea stream-urilor string

17
Gasirea caracterelor într-un string
  • ...
  • int main()
  • //compilatorul concateneaza toate sirurile
  • //intr-un singur string literal
  • string s("Valorile dintr-un subarbore stang"
  • "\nsunt mai mici decat valoarea din"
  • "\nnodul parinte si valorile din"
  • "\norice subarbore drept sunt mai
    mari"
  • "\ndecat valorile din nodul parinte")
  • cout ltlt "Sirul original\n" ltlt s
  • ltlt "\n\n(find) \"subarbore\" a fost gasit
    la "
  • ltlt s.find("subarbore")
  • ltlt "\n(rfind) \"subarbore\" a fost gasit
    la "
  • ltlt s.rfind("subarbore")
  • ...

Gasirea cuvantului "subarbore"
(find) "subarbore" a fost gasit la 18 (rfind)
"subarbore" a fost gasit la 103
18
Gasirea caracterelor într-un string
  • ...
  • int main()
  • ...
  • //gasirea literei 'p'
  • cout ltlt "\n(find_first_of) caracter din
    \"qpxz\" la "
  • ltlt s.find_first_of("qpxz")
  • ltlt "\n(find_last_of) caracter din \"qpxz\"
    la "
  • ltlt s.find_last_of("qpxz")
  • ...

find_first_of gaseste prima aparitie în s a
oricaruia dintre caracterele care formeaza sirul
"qpxz"
find_larst_of gaseste ultima aparitie în s a
oricaruia dintre caracterele care formeaza sirul
"qpxz", cautarea începând cu ultima pozitie din
sirul s
((find_first_of) caracter din "qpxz" la
73 (find_last_of) caracter din "qpxz" la 158
19
Gasirea caracterelor într-un string
  • ...
  • int main()
  • ...
  • //gasirea caracterului '-'
  • cout ltlt "\n(find_first_not_of) primul caracter
    care\n"
  • ltlt " nu este continut in \"Valorie
    dntusbgmcvp\" "
  • ltlt s.find_first_not_of("Valorie
    dntusbgmcvp")
  • //gasirea caracterului '\n'
  • cout ltlt "\n(find_last_not_of) primul caracter
    de la dreapta care\n"
  • ltlt " nu este continut in \"Valorie
    dntusbgmcvp\" "
  • ltlt s.find_last_not_of("Valorie
    dntusbgmcvp") ltlt endl

(find_first_not_of) primul caracter care nu
este continut in "Valorie dntusbgmcvp"
14 (find_last_not_of) primul carácter de la
dreapta care nu este continut in "Valorie
dntusbgmcvp" 132
20
Sumar
  • Asignarea si concatenarea string-urilor
  • Subsiruri
  • Caracteristicile obiectelor string
  • Gasirea caracterelor într-un string
  • Înlocuirea caracterelor dintr-un string
  • Inserarea caracterelor într-un string
  • Iteratori
  • Procesarea stream-urilor string

21
Înlocuirea caracterelor dintr-un string
  • ...
  • int main()
  • string s("Valorile dintr-un subarbore stang"
  • "\nsunt mai mici decat valoarea din"
  • "\nnodul parinte si valorile din"
  • "\norice subarbore drept sunt mai
    mari"
  • "\ndecat valorile din nodul parinte")
  • s.erase(62)
  • cout ltlt "Sirul original dupa stergere\n" ltlt s
  • ltlt "\n\nDupa inlocuire\n"
  • ...

Sunt sterse toate caracterele de la locatia 62
pâna la sfârsitul sirului
Sirul original dupa stergere Valorile dintr-un
subarbore stang sunt mai mici decat valoarea
22
Înlocuirea caracterelor dintr-un string
  • ...
  • int main()
  • ...
  • unsigned int x s.find(" ")
  • while(x lt stringnpos)
  • s.replace(x, 1, ".")
  • x s.find(" ", x1)
  • cout ltlt s ltlt endl
  • return 0

Toate spatiile sunt înlocuite cu punct
Functia find întoarce constanta stringnpos când
ajunge la sfârsitul sirului
Dupa inlocuire Valorile.dintr-un.subarbore.stang
sunt.mai.mici.decat.valoarea
23
Sumar
  • Asignarea si concatenarea string-urilor
  • Subsiruri
  • Caracteristicile obiectelor string
  • Gasirea caracterelor într-un string
  • Înlocuirea caracterelor dintr-un string
  • Inserarea caracterelor într-un string
  • Iteratori
  • Procesarea stream-urilor string

24
Inserarea caracterelor într-un string
  • ...
  • int main()
  • string s1("inceput sfarsit"),
  • s2("mijloc "), s3("12345678"), s4("xx")
  • cout ltlt "Sirurile initiale\ns1 " ltlt s1
  • ltlt "\ns2 " ltlt s2 ltlt "\ns3 " ltlt s3
  • ltlt "\ns4 " ltlt s4 ltlt "\n\n"
  • s1.insert(8, s2)
  • s3.insert(3, s4, 0, stringnpos)
  • cout ltlt "Sirurile dupa insert\ns1 " ltlt s1
  • ltlt "\ns2 " ltlt s2 ltlt "\ns3 " ltlt s3
  • ltlt "\ns4 " ltlt s4 ltlt endl
  • return 0

Inserarea cuvântului "mijloc" la pozitia 8
Inserarea sirului "xx" la pozitia 3 din s3.
Ultimele doua argumente specifica elementul de
start si numarul caracterelor din s4 care se
insereaza
Sirurile dupa insert s1 inceput mijloc
sfarsit s2 mijloc s3 123xx45678 s4 xx
25
Sumar
  • Asignarea si concatenarea string-urilor
  • Subsiruri
  • Caracteristicile obiectelor string
  • Gasirea caracterelor într-un string
  • Înlocuirea caracterelor dintr-un string
  • Inserarea caracterelor într-un string
  • Iteratori
  • Procesarea stream-urilor string

26
Iteratori
  • Clasa string contine iteratori pentru parcurgerea
    înainte si înapoi a unui sir
  • Iteratorii dau acces individual la caractere
  • Sintaxa este similara operatorilor pointer

27
Iteratori
  • ...
  • int main()
  • string s("Testarea iteratorilor")
  • stringconst_iterator i1 s.begin()
  • cout ltlt "s " ltlt s
  • ltlt "\n(Folosind iteratorul i1) s este "
  • while(i1 ! s.end())
  • cout ltlt i1
  • i1
  • cout ltlt endl
  • return 0

Functii care returneaza iteratori
s Testarea iteratorilor (Folosind iteratorul
i1) s este Testarea iteratorilor
28
Sumar
  • Asignarea si concatenarea string-urilor
  • Subsiruri
  • Caracteristicile obiectelor string
  • Gasirea caracterelor într-un string
  • Înlocuirea caracterelor dintr-un string
  • Inserarea caracterelor într-un string
  • Iteratori
  • Procesarea stream-urilor string

29
Procesarea stream-urilor string
  • In-memory I/O sau string stream processing
  • posibilitatea intrarilor din string-uri din
    memorie si a iesiriilor în string-uri în memorie
  • Clasele istringstream si ostringstream
  • typedef basic_istringstreamltchargt istringstream
  • typedef basic_ostringstreamltchargt ostringstream
  • Clasele au aceleasi functionalitati ca istream si
    ostream la care se adauga câteva functii
    specifice formatarii în memorie
  • Pentru a folosi aceste clase trebuie include
    fisierele header ltsstreamgt si ltiostreamgt

30
Procesarea stream-urilor string
  • Aplicatii ale acestei tehnici
  • Validarea datelor
  • Un program poate citi într-o prima faza o linie
    de date dintr-un stream într-un string, urmând ca
    apoi o rutina de validare sa parcurga si, daca
    este necesar, sa corecteze datele. În final,
    programul poate citi datele din string stiind ca
    acestea sunt în formatul corect
  • Iesirea într-un string
  • Datele pot fi pregatite într-un string pentru a
    simula formatul de afisare pe ecran, dupa care
    obiectul de tip string poate fi transferat pe
    disc pastrând imaginea de pe ecran

31
Procesarea stream-urilor string
  • ...
  • include ltsstreamgt
  • using stdostringstream
  • int main()
  • ostringstream outputString
  • string s1("Iesirie catorva tipuri de date "),
  • s2("intr-un obiect ostringstream"),
  • s3("\n double "),
  • s4("\n int "),
  • s5("\nadresa de int ")
  • double d 123.4567
  • int i 22
  • outputString ltlt s1 ltlt s2 ltlt s3 ltlt d ltlt s4 ltlt d
    ltlt s5 ltlt i
  • cout ltlt "outputString contine\n" ltlt
    outputString.str()
  • ...

outputString contine Iesirie catorva tipuri de
date intr-un obiect ostringstream double
123.457 int 123.457 adresa de int
0x22fe34
32
Procesarea stream-urilor string
  • ...
  • int main()
  • ...
  • outputString ltlt "\nse mai adauga caractere"
  • cout ltlt "\n\nDupa inserarea in stream,\n"
  • ltlt "outputString contine\n" ltlt
    outputString.str()
  • ltlt endl
  • return 0

Dupa inserarea in stream, outputString
contine Iesirie catorva tipuri de date intr-un
obiect ostringstream double 123.457
int 123.457 adresa de int 0x22fe34 se mai
adauga caractere
33
Procesarea stream-urilor string
  • Un obiect istringstream citeste date dintr-un
    string în memorie
  • Datele sunt pastrate într-un istringstream ca si
    caractere
  • Intrarile din obiectele istringstream
    functioneaza asemanator intrarii dintr-un fisier
    în general, sau de la intarea standard în
    particular
  • Sfârsitul obiectului string este interpretat de
    istringstream ca end-of-file

34
Procesarea stream-urilor string
  • ...
  • int main()
  • string input("Input test 123 4.7 A")
  • istringstream inputString(input)
  • string string1, string2
  • int i
  • double d
  • char c
  • inputString gtgt string1 gtgt string2 gtgt i gtgt d gtgt
    c
  • cout ltlt "Au fost extrase urmatoarele
    elemente\n"
  • ltlt "din obiectul istringstream"
  • ltlt "\nstring " ltlt string1
  • ltlt "\nstring " ltlt string2
  • ltlt "\n int " ltlt i
  • ltlt "\ndouble " ltlt d
  • ltlt "\n char " ltlt c

Au fost extrase urmatoarele elemente din obiectul
istringstream string Input string test int
123 double 4.7 char A
35
Procesarea stream-urilor string
  • ...
  • int main()
  • ...
  • //citire din stream vid
  • long x
  • inputString gtgt x
  • if(inputString.good())
  • cout ltlt "\n\nvaloarea long este " ltlt x ltlt
    endl
  • else
  • cout ltlt "\n\ninputString este vid" ltlt endl
  • return 0

Conditia inputString.good() este evaluata ca
fiind false, executându-se ramura else a
structurii if/else
inputString este vid
Write a Comment
User Comments (0)
About PowerShow.com