Sunteți pe pagina 1din 26

Șiruri de caractere

Sesiunea 5:

Temele:
1) Siruri de caractere;
2) Operatii cu siruri de caractere;
Tema: Siruri de caractere.

La lecțiile precedente ai învățat să folosești tablourile unidimensionale și bidimensionale, care conțin valori numerice. Ai
observat că valoarea fiecărui element al tabloului trebuie citită separat, ceea ce nu este întotdeauna comod. Problemele pot
deveni și mai mari, dacă elementele tabloului sunt caractere (char) – îți închipui cum ar fi să scrii un text, acționând după fiecare
literă scrisă tasta Enter?

Șir de caractere - tablou unidimensional de caractere, care se termină cu caracterul NULL: '\0'.

NUL - Caracter care semnifică ”nimic”. Caracterul nul nu se afișează, nu ocupă spațiu pe ecran sau la tipar,
nu produce nici o acțiune. Caracterul nul însă ocupă spațiu în memorie. Este identificat în tabelul ASCII de
codul 0. Notația folosită: '\0'.
Declararea sirurilor

char <nume sir de caractere>[<numar caractere in sir>];

char <nume sir >[<numar caractere>] = {”<valoarea de initializare>”};

string <nume sir de caractere>;

În cazul utilizării datelor string se recomandă includerea în program a librăriei <string>


Declararea sirurilor
Citirea unui șir de caractere în C++

C++ permite citirea șirurilor de caractere care nu conțin spații cu ajutorul obiectului cin:

• cin >> <nume sir de caractere>;

Pentru șirurile de caractere cu structură complexă se recomandă utilizarea tipului de date string, citirea
datelor de acest tip se va folosi funcția getline:

• getline( cin, <nume string>);

6
Citirea unui șir de caractere în C++

Fie declarația:
string q;
char s[30];

 Citirea valorii q cu ajutorul funcției getline va avea forma: getline( cin, q);
 Citirea valorii s cu ajutorul funcției cin va avea forma: cin>> s;

7
Afișarea unui șir de caractere în C++

Dacă în șirul de caractere


nu apar spații, șirul de
caractere este citit integral.
În caz contrar funcția cin
citește șirul de caractere
până la primul spațiu. 8
Afișarea unui șir de caractere în C++

Fiind una universală, funcția


permite introducerea șirurilor
de caractere cu structură
arbitrară:

9
Parcurgerea șirurilor de caractere

În același timp ar fi foarte util să putem accesa fiecare element


separat al șirului, la fel ca în tablourile cu numere. Ei bine, aici
șirurile de caractere se comportă exact ca tablourile! - ai acces la
fiecare caracter din șir după indicele lui. Trebuie să ții cont doar că
primul element al șirului de caractere are indicele 0, iar la sfârșitul
șirului de caractere este întotdeauna caracterul nul ’\0’.
Parcurgerea șirurilor de caractere

Parcurgerea elementelor șirului unul câte Determinarea lungimii n a șirului s


unul, pornind de la caracterul cu indicele apelând funcția strlen din librăria
0 și până la întâlnirea caracterului nul. <string.h>, apoi parcurgerea șirului cu o
buclă for.
Parcurgere sir până la elementul nul Parcurgere sir cu for

#include <iostream> #include


#include <iostream>
<iostream>
using namespace std; #include
#include <string.h>
<string.h>

char
char s[20]
s[20] =
= {"TEKWILL"};
{"TEKWILL"}; using
using namespace
namespace std;
std;

int main() char


char s[20]
s[20] =
= {"SCOOTER"};
{"SCOOTER"};
{{
int
int ii = = 0;
0; int
int main()
main()
while (s[i] != '\0') {{
{{ int
int n; n;
cout << s[i] << " "; n = strlen(s);
i++;
i++; cout
cout <<
<< "Lungimea
"Lungimea sirului
sirului :: "" <<
<< n
n <<
<< endl;
endl;
} for
for (int
(int ii =
=00 ;; ii << n;
n; i++)
i++)
cout << endl << i; cout << s[i] << " ";
return
return 0; 0; return
return 0; 0;
} }}

12
Practica
Tema: Siruri de caractere.

Există o mulțime de operații care pot fi realizate asupra șirurilor de caractere. Cele mai importante sunt:

● Calcularea lungimii șirului de caractere


● Compararea a două șiruri de caractere
● Concatenarea șirurilor de caractere
● Copierea unei secvențe dintr-un șir de caractere
● Radierea unei secvențe dintr-un șir de caractere
Operații cu șiruri de caractere

Lungime a șirului de caractere este considerat numărul de caractere în șir de la caracterul cu indicele 0
până la caracterul nul ’\0’.

Compararea șirurilor de caractere este o operație deosebit de interesantă, deoarece șirurile nu se


compară după lungime, ci după codurile caracterelor.
Copierea unei secvențe dintr-un șir de caractere

În multe situații prelucrarea șirurilor de caractere presupune copierea dintr-un șir a unei secvențe de
caractere și utilizarea ulterioară a acestei secvențe în calitate de alt șir. Aceasta este operația care ”se
ascunde în spatele” acțiunilor Copy + Paste, pe care le efectuezi frecvent la editarea textelor.

for (int j = i; j < i + k; j++)


q[j - i] = s[j];
q[k] = ’\0’;
Concatinarea șirurilor de caractere

1. Se declară șirul w cu un număr de elemente, care este egal sau depășește


Concatenarea este operația de ”lipire” a șirurilor de
suma lungimilor șirurilor s și q.
caractere. Dacă ai două șiruri de caractere s și q,
2. Se adaugă consecutiv în w, începând cu indicele 0, toate elementele din s.
rezultatul concatenării lor va fi un al treilea șir, format
3. Se reține valoarea k a indicelui ultimului caracter adăugat.
din elementele șirului s, după care urmează elementele
4. Se adăugă consecutiv în w, începând cu indicele k+1, caracterele șirului
șirului q. q.
5. Se fixează sfârșitul șirului format prin adăugarea caracterului ’\0’.
Radierea unei secvențe dintr-un șir de caractere

Radierea, sau eliminarea unei secvențe de caractere dintr-un șir este o altă operație frecvent utilizată la
prelucrarea datelor în editoarele de text. Ea modelează acțiunea de ”decupare” Delete sau, în combinație cu
operația de copiere - Ctrl + X.
Simplu de observat că radierea secvenței s[i], s[i+1], ..., s[i+k] presupune deplasarea elementelor din dreapta
secvenței, inclusiv a elementului nul ’\0’ cu k poziții spre stânga.

Atenție! Unele caractere radiate sau caracterele deplasate pot rămâne în memorie, dar ele
nu mai fac parte din șirul s.
Functii din biblioteca string.h

Operația Funcția Descrierea


Calcularea lungimii strlen(s) Calculează numărul de caractere vizibile din
șirului de caractere șirul s
Compararea șirurilor strcmp(s, q) Compară șirurile s și q. Returnează valoarea
de caractere 0, dacă șirurile sunt egale, valoare negativă
dacă s < q, valoare pozitivă dacă s > q.
strncmp(s,q, nr) Compară din punct de vedere lexicografic
primele nr caractere din s și q.
stricmp(sir1, sir2) Sunt asemănătoare cu strcmp și strncmp, cu
strincmp(sir1, sir2,nr) deosebirea că nu fac deosebire între litere
mari și mici.
Concatenarea șirurilor strcat(s, q) Concatenează șirurile de caractere s și q.
de caractere Șirul de caractere rezultant înlocuiește
valoarea inițială a șirului s.
Functii din biblioteca string.h
Operația Funcția Descrierea
Copierea șirurilor de strcpy(s, q) Copie valoarea șirului de caractere q în
caractere șirul s.
strncpy(s, q, nr) Copiază în șirul s primele nr caractere din
șirul q
Căutarea unui caracter dest=strchr(s, caracter) Caută caracter în șirul sursa și
într-un șir returnează în dest adresa primei apariții
a caracterului în sursă.
Funcția va returna ”o porțiune” din șirul
sursa, începând de la prima apariție a
caracterului caracter până la sfârșitul
șirului.
În cazul în care nu se găsește caracterul
în șir funcția va returna NULL.

dest=strrchr(s, caracter) Funcția returnează adresa ultimei apariții


a caracter în șirul sursa.
Functii din biblioteca string.h

Operația Funcția Descrierea


Căutarea unui subșir dest=strstr(s, q) Caută șirul q în șirul s și returnează în
într-un subșir dest adresa primei apariții a șirului q în
șirul s.
Funcția va returna ”o porțiune” din șirul s,
începând de la prima apariție a sirului q
până la sfârșitul șirului s.
În cazul în care nu se găsește șirul q în
șirul s va returna NULL.
Inversarea unui subșir dest=strrev(sursa) Funcția realizează inversarea șirului
sursa în șirul dest.
Functii din biblioteca string.h
#include <iostream>
#include <string.h>
using namespace std;

int main()
{
char s[256];
int i, k=0;
int len;
cout << "dati sirul:" ;
cin.get(s,255);
cout << "sirul introdus:" << s << endl;
len=strlen(s);
for (i=0; i<len; i++)
//if (s[i]=='A') k++;
//cout << "numarul de caractere:" <<k;
if (s[i]=='A') strcpy(s+i, s+i+1);
cout << "sirul modificat este:" << s;
return 0;
}

24
Practica
Mulțumesc.

S-ar putea să vă placă și