Sunteți pe pagina 1din 17

IRURI DE CARACTERE

irurile de caractere sunt tablouri de caractere, care au ca ultim element un terminator de ir, caracterul NULL (zero ASCII), \0. Exemplu: char tc[5] = {a, b, c, d, e}; char sc[5] = {a, b, c, d, \0}; // tablou de caractere // irul de caractere cu elementele abcd

Limbajul C/C++ permite iniializarea unui tablou de caractere printr-o constant ir (ir ntre ghilimele), care include automat caracterul NULL. Deci ultima iniializare este echivalent cu: char sc[5] = abcd; //sau cu char sc[] = abcd;

Exemplu: char tc[5] = {a, b, c, d, e}; char sc[5] = {a, b, c, d, \0}; char sc1[5] = abcd; char s[10]; cout<<sc<<\n; //afieaz abcd

cout<<tc<<\n; //eroare: tabloul de caractere nu conine terminatorul de ir, deci nu poate fi afiat ca ir cout<<s<<\n; cout<<sc1[2]; sc1[1]=K; // eroare: tablou neiniializat // afieaz al treilea element din irul sc1 // elementului din ir de indice 1 i se atribuie valoarea K;

Declara un sir de caractere se utilizeaza functia:

char nume sir[nr.elemente sir]


Exemplu: char sir1[100] - sa declarat sirul cu numele sir1 care poate lista 100 caractere

Sirul vid sau sirul nul este sirul care are lungimea 0
Ex.: char sir[256]=; Observatie: se poate initializa ca sir nul atribuind primei pozitii din sir valoarea NULL printr-una din urmatoarele instructiuni de atribuire: sir[0]=NULL sir[0]=0 Sir[0]=\0

Pentru citirea sirurilor de caractere se utilizeaza functia:


cin.get(vector de caractere, nr, ch) sir de tip sir de caratere nr un numar intreg ch de tip caracter , acesta fiind optional Efectul instructiunii: se citesc de la tastatura caractere, inclusiv caractere albe, pana cand se produce una dintre urmatoarele evenimenete: - au fost citite maxim nr-1 caractere - a fost intalnit caracterul ch care are rol de delimitator Ex: Char sir[256]; cin.get(sir,9,#) se vor citi maxim 8 caractere sau pana la intalnirea caracterului # Observatie: Dupa tastarea unui sir de caractere , la apasarea tastei Enter se intrerupe citirea

Daca dorim sa introducem mai multe siruri de caractere se utilizeza cin.get() astfel: char s1[20],s2[30]; cin.get(s1,20); cin.get(); cin.get(s2,30); cout<<s1<<endl<<s2;
Daca ar lipsii functia cin.get() a doua citire nu ar putea fi efectuata, deoarece la apasarea tastei Enter in memorie este pastrat caracterul '\n' , fapt care duce la intreruperea citirii. Exemplu: #include<iostream.h> #include<conio.h> void main() { char s1[20],s2[20]; cin.get(s1,20); cin.get(); cin.get(s2,20); clrscr(); cout<<s1<<endl<<s2; getch(); }

Functia :
gets(<variabila_sir); se gaseste in header-ul <stdio.h> -citirea se opreste la apasarea tastei ENTER

cin>><variabila_sir>; -citirea se opreste la citirea la primul spatiul


Scierea unui sir de caractere se face cu: -cout -puts(var_sir);

Parcurgerea unui sir de caractere -un sir de caractere este privit ca un vector de caractere, fiecare caracter este identificat prin pozitia sa in cadrul sirului.

Se pot scrie mai multe siruri de cuvinte daca declaram o matrice de tip char
char a[10][20] spatiu) Exemplu: #include<iostream.h> #include<conio.h> void main() { char a[10][20]; int n,i; cout<<"Nr.cuvinte "; cin>>n; for(i=0;i<n;i++) cin>>a[i]; clrscr(); for(i=0;i<n;i++) cout<<a[i]<<endl; getch(); } se pot scrie 10 siruri cu cate 20 caractere fiecare sir (fara

FUNCII PENTRU OPERAII CU IRURI DE CARACTERE


Funciile pentru operaii cu iruri se gsesc n header-ul <string.h>. Functia strlen strlen (nume_ir) Returneaz un numr ntreg ce reprezint lungimea unui ir de caractere, fr a numra terminatorul de ir. Exemplu: Se citeste un sir de caractere si se afiseaza numarul de caractere a sirului #include<iostream.h>
#include<conio.h> #include<string.h> void main() { char s1[100]; cin.get(s1,100); cin.get(); cout<<"Sirul citit are"<<" "<<strlen(s1)<<" "<<"caractere"; getch(); }

Functia strcpy.
strcpy(destinatie,sursa) Functia are rolul de a copia sirul de la adresa sursa la adresa destinatie. strncpy(destinatie,sursa,n) -sunt copiate din sirul sursa in sirul destinatie primele n caractere Exemplu: #include<iostream.h> #include<conio.h> #include<string.h> void main() { char s1[20]="Limbajul Turbo C++, s2[20]="Limbajul C++"; strcpy(s1,s2); cout<<s1; getch(); }

Functia strcat.
strcat(destinatie,sursa) Functia are rolul de a adauga sirului de la adresa destinatie sirul de la adresa sursa Exemplu: #include<iostream.h> #include<conio.h> #include<string.h> void main() { char s1[20]="Limbajul Turbo C++",s2[20]=" si Limbajul C++"; strcat(s1,s2); cout<<s1; getch(); }

Functia strncat strncat(destinatie,sursa,n) Functia adauga sirului destinatie primii n octeti ai sirului sursa Exemplu: #include<iostream.h> #include<conio.h> #include<string.h> void main() { char s1[20]="Limbajul Turbo C++",s2[20]=" si Limbajul C++"; strncat(s1,s2,5); cout<<s1; getch(); }

Compararea irurilor
Funcia strcmp are forma general strcmp( s1, s2); strncmp(s1,s2,n) i are rolul de a compara dou iruri de caractere. Valoarea returnat este: <0, dac s1<s2 =0, dac s1 = s2 >0, dac s1 > s2 Funcia strcmp face distincie ntre literele mari i mici ale alfabetului. Funcia stricmp are forma general stricmp( s1, s2); strncmpi(s1,s2,n) i are rol ca strcmp. Diferena este c nu face distincie ntre literele mari i mici.

Exemplul1:

#include<iostream.h> #include<conio.h> #include<string.h> void main() { char a[20],b[20]; int semn; cout<<"Introduceti sirul a: "; cin>>a; cout<<"Introduceti sirul b: "; cin>>b; semn=strcmp(a,b); if(semn<0) cout<<"a < b"; else if(semn>0) cout<<"a > b"; else cout<<"a = b"; getch(); }

Subiruri
Funcia strstr strstr( s1, s2); i are rolul de a identifica dac irul s2 este subir (caractere succesive) al irului s1. Dac acesta este identificat, funcia returneaz adresa de nceput n cadrul irului s1, altfel returneaz adresa nul (0). Cutarea se face de la stnga la dreapta. n cazul n care s2 apare de mai multe ori n cadrul lui s1, se returneaz adresa de nceput a primei apariii.

Functia strchr cautarea unui caracter intr-un sir strchr(nume sir, ' caracter ' ) Functia cauta in sirul nume sir caracterul caracter si returneaza subsirul care incepe cu prima aparitie a caracterului citit Exemplul1: se va lista Turbo C++
#include<iostream.h> #include<conio.h> #include<string.h> void main() { char s1[20]="Limbajul Turbo C++"; cout<<strchr(s1,'T'); getch(); }

Functiile strlwr si struwr


strlwr(s1) - converteste toate literele sirului s1 in litere mici struwr(s2) - converteste toate literele sirului s2 in litere mari

Functia strcspn strcspn(s1,s2) Functia returneaza numarul caracterelor e din sirul s1 care nu se gasesc in sirul s2

Functia strspn
strspn(s1,s2) Functia returneaza numarul caracterelor consecutive din sirul s1 care se gasesc in sirul s2

Exemplu: #include <iostream.h> #include <string.h> void main() { char sir1[] = abcd, sir2[] = abcde, sir3 = abcdef------------------------, sir4 = de; cout<<strcmp(sir1, sir2)<<\n; // afiare: -101 // e = 101, a = 97, d = 100 //0 - e = -101 cout<<strcmp(sir2, sir1)<<\n; //afiare: 101 cout<<strcmp(sir1, "")<< '; //compararea variabilei sir1 cu constanta ir vid char str1[20]=hello; char str2[20]=goodbye; char str3[20]; int difer, lungime;

cout<<str1=<<str1<< str2=<<str2<<\n; difer=strcmp(str1, str2); if (difer == 0) cout<<Siruri echivalente!\n; else if (difer>0) cout<<str1<< mai mare (lexicografic) dect <<str2<<\n; else cout<<str1<< mai mic (lexicografic) dect <<str2<<\n; cout<<str1=<<str1<<\n; cout<<str3=<<str3<<\n; strcpy (str3, str1); cout<<str1=<<str1<<\n; cout<<str3=<<str3<<\n; strcat (str3, str1); cout<<str1=<<str1<<\n; cout<<str3=<<str3<<\n; }

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