Loading presentation...

Present Remotely

Send the link below via email or IM

Copy

Present to your audience

Start remote presentation

  • Invited audience members will follow you as you navigate and present
  • People invited to a presentation do not need a Prezi account
  • This link expires 10 minutes after you close the presentation
  • A maximum of 30 users can follow your presentation
  • Learn more about this feature in our knowledge base article

Do you really want to delete this prezi?

Neither you, nor the coeditors you shared it with will be able to recover it again.

DeleteCancel

Make your likes visible on Facebook?

Connect your Facebook account to Prezi and let your likes appear on your timeline.
You can change this under Settings & Account at any time.

No, thanks

ȘșSiruri de caractere

No description
by

Raluca-Ioana Văcaru

on 15 January 2014

Comments (0)

Please log in to add your comment.

Report abuse

Transcript of ȘșSiruri de caractere

Siruri de caractere
Ce sunt
Un şir de caractere este o structură de date care este formată dintr-o multime ordonată de caractere, în care fiecare caracter se identifică prin pozitia sa în cadrul multimii. Un şir de caractere este, de fapt, o succesiune de caractere.
Cum se declara
Șirurile de caractere și functiile asociate acestora se găsesc în biblioteca
string.h
și
stdlib.h
. Declaratia unui șir de caractere se face cu ajutorul tipului
char
.
Reprezentare in memorie
În limbajul C/C++ şirurile de caractere pot fi implementate ca vectori de caractere. În general, vectorii au două lungimi: o lungime fizică şi o lungime logică, ceea ce se aplică şi vectorilor de caractere. Ceea ce deosebeşte un vector de caractere de alte tipuri de vectori este posibilitatea de a marca sfârşitul logic al vectorului prin folosirea caracterului NULL.
Exemple
:
char s [256];
// s reprezintă un şir în care vor putea fi memorate maxim 255 caractere, deoarece un element al vectorului se va folosi pentru a memora caracterul NULL.
char s [ ] = "Buna ziua";
// Putem initializa un şir de caractere la declararea lui şi în acest caz lungimea şirului poate lipsi, atribuindu-i o constantă de tip şir de caractere (o succesiune de caractere delimitată de ghilimele).
char s
; // Am declarat un caracter. Astfel, in s putem memora un singur caracter, nu un șir de caractere.
Observatie
:
Un șir de caractere este memorat începând cu pozitia 0. Astfel, spre exemplu, în șirul "Buna ziua", B are indicele 0, n indicele 2 si ultimul caracter a are indicele 8, adică lungimea șirului (fără caracterul NULL) - 1.
Tipul char este un tip întreg, cu semn, care se reprezintă pe un octet. Acest tip suportă un singur modificator, unsigned.
Tip
Valori
Reprezentare
char
unisgned char
[-128; 127]
[0; 255]
un octet, cu semn
un octet, fara semn
Exemplu:
Pentru sirul s declarat compilatorul va rezerva 9 octeti pentru memorarea constantei sir de caractere si 1 octet pentru caracterul NULL, deci în total 10 octeti.
Observatie:
O constanta de tip sir de caractere ce contine un singur caracter este diferita de o constanta de tip caracter, prima e stocata pe doi octeti, a doua doar pe un octet.

Caractere
Caracterele
grafice se pot reprezenta încadrând caracterul respectiv între apostrofuri.
Exemple
: ' a ', ' 0 ', ' * ', ' . '.
Caracterele negrafic
e (dar şi cele grafice) se pot specifica încadrând între apostrofuri o secvență de evitare, numită şi secvență escape. Aceste secvențe sunt formate din caracterul \ urmat de codul ASCII al caracterului negrafic respectiv, exprimat în octal sau hexazecimal. Caracterele negrafice mai des utilizate au asociate secvențe escape speciale, formate din \ şi o literă sugestivă.
Exemple:
• ' \n ' – caracterul newline (determină trecerea cursorului la linie nouă)
• ' \t ' – caracterul tab orizontal
• ' \b ' – caracterul backspace (deplasează cursorul pe ecran cu o poziție la stânga)

Codul ASCII

ASCII este acronimul pentru American Standard Code for Information Interchange ("Codul Standard American pentru Schimbul de Informatii"). ASCII reprezintă un sistem de codificare a caracterelor, bazat pe alfabetul englez. Setul de caractere ASCII contine 128 de caractere: litere mari și mici, numere, elemente de punctuatie și coduri de control. Fiecare literă este reprezentată de un număr.
Cele mai importante coduri ASCII, care sunt utilizate cel mai des in rezolvarea problemelor, sunt:
• 48 - cifra 0 (49 - 1, 50 - 2 ... 57 - 9)
• 65 - litera A (66 - B, 67 - C ... 90 - Z)
• 97 - litera a (98 - b, 99 - c ... 122 - z)
De asemenea, folositoare în rezolvarea problemelor este și diferenta dintre codul ASCII al caracterului a și codul ASCII al caracterului A, adică 32, pentru cazurile în care ni se cere transformarea literelor mari în litere mici și invers. De retinut că literele mari ale alfabetului se află în codul ASCII înaintea literelor mici.

Citirea

Fie următoarea declaratie:
char s [100];
Citirea şirului
s
se poate face utilizând operatorul uzual de citire "
>>"
:
cin>>s
; În acest caz se vor citi în şirul
s
toate caracterele până la primul caracter alb (spatiu, tab, enter). De exemplu, dacă fluxul de intrare contine caracterele ”Buna ziua”, după citire, şirul
s
va fi ”Buna”.
Pentru a elimina acest dezavantaj se pot folosi functiile
get()
sau
getline()
(diferenta între ele este că
getline()
extrage din fluxul de intrare caracterul delimitator, în timp ce
get()
nu îl extrage).
Functia
getline()
se poate utiliza cu următoarea formă:
cin.getline(sir,nr,ch);
unde
sir
este şirul de caractere în care se citeşte,
nr
reprezintă numărul maxim de caractere care se pot citi, iar
ch
este caracterul delimitator (este optional, implicit este ' \n '). Efectul este următorul: se citesc de la tastatură în variabila
sir
mai multe caractere, inclusiv caractere albe, până au fost citite maxim
nr-1
caractere sau până a fost citit caracterul delimitator
ch
.


Afisarea

Se face cu ajutorul operatorului de scriere "
<<
", caracterele fiind afişate până la întâlnirea marcajului de sfârşit de şir (NULL):
cout<<s
;
Exemple:

• cin.getline(s,100); //al treilea parametru lipseşte, deci '\n' este delimitator, acesta fiind delimitatorul implicit.
• cin.getline(s,100,'.'); //in acest caz, se citesc de la tastatură toate caracterele până la întâlnirea caracterului '.'.
Observatie:
La citire, marcajul de sfârşit de şir NULL este automat plasat la sfârşitul şirului.

Operatori
Operatorii pot fi:
• unari (necesită un operand)
• binari (necesită doi operanzi)
• ternari (necesită trei operanzi)
În C++, operatorii sunt de patru feluri: aritmetici, relationali, logici și pe biti, dar există și operatori speciali.

atribuirea
Operatorul de atribuire are simbolul = și poate fi folosit doar la caractere, pentru șirurile de caractere fiind nevoie să folosim o functie.
• operatori aritmetici
Operatorii aritmetici se folosesc pentru caractere, modificându-le codul ASCII, deci și valoarea. Pentru șirurile de caractere se folosesc functii.





unari
- : Minus unar (schimbă semnul operandului); -a
++ : Operator de incrementare (adună 1 la valoarea operandului); a++, ++a
-- : Operator de decrementare (scade 1 din valoarea operandului) a--, --a

binari
+ : Adunarea celor doi operanzi; a+b
- : Scăderea celor doi operanzi; a-b
* : Înmultirea celor doi operanzi; a*b
/ : Împărtirea celor doi operanzi, a/b

operatori relationali
La fel ca și operatorii aritmetici, operatorii relationali se referă strict la codurile ASCII ale caracterelor.

binari
== Egal cu; a==b
!= Diferit de; a!=b
< Mai mic; a<b --- <= mai mic sau egal a<=b
> Mai mare a>b --- >= mai mare sau egal a>=b



operatori logici

pe cuvânt
! NOT (negatie logică) : !(a==b)
&& AND (conjunctie, și logic) : (a>b) && (b>c)
|| OR (disjunctie, sau logic) : (a>b) || (b>c)

pe biti
~ Negatie (complement fată de 1) ~a
& AND (Conjunctie, ȘI logic pe bit) a & 0377
| OR (Disjunctie, SAU logic pe bit) a | 0377
^ XOR (Sau exclusiv logic pe bit) a^b
<< Deplasare la stânga 0377 << 2
>> Deplasare la dreapta 0377 >> 2

• operatori speciali
• sizeof returnează numărul de octeti pe care este memorat o dată de un anumit tip. (exemplu: cout<<sizeof("ab6*); afișează 5).
• operatorul * este un operator unar, numit și operator de deferențiere. Se aplică unei expresii de tip pointer și este folosit pentru a accesa conținutul unei zone de memorie spre care indică operatorul.
• operatorii paranteze parantezele rotunde () se utilizează în expresii, pentru schimbarea ordinii de efectuare a operațiilor, sau la apelul funcțiilor.
• operatorii de indexare operatorii de indexare sunt parantezele pătrate []. Acestea includ expresii întregi care reprezintă dimensiunea unui șir de caractere sau indicii elementelor unui șir de caractere.

Strlen
Strcpy
Strcat
Strncat
Strchr
Strrchr
Strcmp
Strlwr
Struwr


Strlen (nume_sir)
Strcpy (destinatie, sursă)
Strcat (destinatie, sursă)
Strncat (destinatie, sursă, n)
Strchr (nume_șir, 'caracter')
Strrchr (șir, 'caracter')
Strcmp (șir1, șir2)
Strlwr (s1)
Strupr (s1)


<string.h>
<string.h>
<string.h>
<string.h>
<string.h>
<string.h>
<string.h>
<string.h>
<string.h>

Returnează lungimea unui șir (fără a lua în considerare caracterul nul).

Functia are rolul de a copia șirul de la adresa sursa la adresa destinatie.

Funcţia are rolul de a adăuga șirului de la adresa destinatie șirul de la adresa sursă.
Functia adaugă șirului destinatie primii n octeti ai șirului sursă

Functia căută în șirul nume şir caracterul caracter şi returnează subșirul care începe cu prima aparitie a caracterului citit
Returnează adresa ultimei aparitii a caracterului căutat.

Functia are rolul de a compara 2 șiruri de caractere şi va returna valoarea: < 0 dacă sir1 < sir2 ,= 0 dacă sir1 = sir2, > 0 dacă sir1 > sir2
Convertește toate literele șirului s1 în litere mici.

Convertește toate literele șirului s2 în litere mari.

Functii importante
Functie
Sintaxa
Biblioteca
Explicatie
Functie
Sintaxa
Biblioteca
Explicatie
Strstr
Strcspn
Strspn
Atof
Atold
Atoi
Atol
Ecvt
Itoa
Ltoa

Strstr (s1, s2)
Strcspn (s1, s2)
Strspn (s1, s2)
Atof (s)
Atold (s)
Atoi (s)
Atol (s)
Ecvt (nr)
Itoa (nr)
Ltoa (nr)

<string.h>
<string.h>
<string.h>
<stdlib.h>
<stdlib.h>
<stdlib.h>
<stdlib.h>
<stdlib.h>
<stdlib.h>
<stdlib.h>

Identifică dacă s2 este subșir al șirului s1.
Returnează numărul caracterelor din s1 care nu se găsesc în s2.
Returnează numărul caracterelor din s1 care se găsesc în șirul s2 .
Convertește s către tipul double.
Convertește s către tipul long double
Convertește s către tipul int
Convertește s către tipul long
Convertește o valoare double către un șir
Convertește o valoare de tip int către un șir
Convertește o valoare long int către un șir


Scrieţi un program C/C++ care citeşte de la tastatură un şir având maximum 30 de caractere şi afişează pe ecran mesajul DA în cazul în care şirul conţine numai litere şi spaţii, iar în caz contrar afişează mesajul NU.
Exemplu:
dacă se citeşte de la tastatură şirul:
Ana, Bogdan au 18 ani.
atunci programul va afişa mesajul
Nu
.

Probleme rezolvate
• 1. BAC 2009 - Varianta 51, subiectul II, problema 5
Scrieţi un program C/C++ care citeşte de la tastatură un şir de cel mult 50 de caractere (litere mici şi mari ale alfabetului englez, cifre şi spaţii), determină şi afişează pe ecran câte litere mari, câte litere mici şi câte caractere nu sunt litere în şirul citit.
Exemplu: dacă se citeşte şirul: Voi lua 9 la matematica si 10 la informatica
atunci se va afişa: 1 32 11.

BAC 2009 - Varianta 58, Subiectul II, problema 5
Scrieţi un program C/C++ care citeşte de la tastatură o frază având maximum 100 de caractere, în care cuvintele sunt separate prin câte un spaţiu; programul construieşte în memorie şi afişează pe ecran un şir ce conţine doar primul caracter al fiecăruia dintre cuvintele frazei, în ordinea în care acestea apar în frază, ca în exemplu.
Exemplu:
dacă se citeşte fraza
Ana sustine bacalaureatul la informatica
atunci se va afişa Asbli


BAC 2009 - Varianta 52, Subiectul II, problema 5
BAC 2009 - Varianta 59, Subiectul II, problema 5
Scrieţi un program C/C++ care citeşte de la tastatură un şir de cel mult 50 de caractere (litere mici şi mari ale alfabetului englez, cifre, puncte, virgule şi spaţii) şi afişează pe ecran cifra care apare de cele mai multe ori în şirul citit.
Dacă şirul conţine mai multe cifre cu număr maxim de apariţii, atunci se va afişa cea mai mică dintre acestea. Dacă şirul nu conţine cifre, se va afişa pe ecran mesajul NU.
Exemplu
: dacă se citeşte şirul:
Voi lua 9,5 la matematica 10 la informatica si 10 la romana
atunci se va afişa cifra 0 (pentru că cifrele 0 şi 1 apar de cele mai multe ori în şir şi 0 este cea mai mică dintre ele)

BAC 2009 - Varianta 60, Subiectul II, problema 5
Scrieţi un program C/C++ care citeşte de la tastatură un şir de cel mult 50 de caractere (litere mici şi mari ale alfabetului englez, cifre şi spaţii) şi afişează pe ecran litera mică cel mai des întâlnită în şirul citit. Dacă există mai multe litere mici cu număr maxim de apariţii, programul o va afişa pe prima dintre ele în ordine alfabetică. Dacă şirul nu conţine litere mici, atunci pe ecran se va afişa mesajul nu.
Exemplu
: dacă se citeşte şirul:
mergem la munte
atunci se va afişa: e (pentru că literele e şi m apar de cele mai multe ori în şir şi e este prima dintre ele în ordine alfabetică).

Proiect realizat de:
Dinu Ioan
Rosca Stefania
Vacaru Raluca
Profesor coordonator:
Pristavu Diana
Full transcript