Sunteți pe pagina 1din 7

Siruri de caractere

Tipul char

= este format din codurile ASCII ( 0,1,...255) ale


caracterelor
= este un tip de date ordonat( vom putea utiliza
variabile de tip char ca iterator )
De ex:
for( char c='a';c<='z';c++) /// daca vreau sa accesez
ordonat literele mici, fiecare o singura data
.........
= constantele tipului se scriu intre ' '
= variabilele se declara : char x;
= (97)= 'a'<'b'<...<'z'
98
(65)= 'A'<'B'<...<'Z'
66
k='a'-'A'( =32) => poate fi folosita la conversia intre
lower case si upper case
= '0'<'1'<...'9'
48 49.....

Daca vreau sa obtin cifra intreaga coresp unui caracter


cifra: '7' - '0' =7( intreg)

Operatii cu caractere

1. Citire

cin>>x;///apas o tasta

2. Afisarea cout<<x;

3. Atribuirea : c='a' sau c++;

4. Compararea : cu operatorii relationali <, <=, >, >=,


==, !=
if(x>='a'&&x<='z')....
if(c==' ')...

Functii pe char (<cctype>)

= isalpha(c), da ca raspuns 1, daca c este litera si 0


in caz contrar
= islower(c) , este 1 daca c este litera mica
= isupper(c), este 1 daca c este litera mare
= isdigit(c), este 1 daca c este caracter cifra
c=tolower(c), converteste c in litera mica
c=toupper(c) converteste c in litera mare

Un sir de caractere este un tablou unidimensional cu


elemente de tip char care are la final cel putin un
caracter 0 ASCII( NULL, '\0')

Declarare

char s[101];- poate memora un sir cu max 100 caractere


Odata cu declararea pot face si initializarea sirului cu
o constanta sir
Ex: char v[ ]="aeiouAEIOU";

Indicii caracterelor in sir incep intotdeauna de la 0

Citirea

a) daca sirul nu contine spatii( sau tab-uri)

cin>>s;
b) daca s are spatii

cin.getline(s, 101);

Scrierea

cout<<s;

Prelucrarea unui sir

- poate fi facuta fie prin parcurgere cu indici (i)si


prelucrarea caracterelor s[i]
-poate fi facuta cu variabile pointer la char
( variabile de tip adresa)
- poate fi facuta cu ajutorul functiilor de prelucrare a
sirurilor

Pointer la char

O variabila pointer la char va memora adresa de memorie


a unui caracter

char x; /// in momentul declararii, variabila x va


primi o adresa (un numar hexazecimal)
char *p;/// pointer la char
p=&x;

cout<<p;/// se va afisa adresa de memorie a lui x


cout<<*p;/// se va afisa valoarea caracterului memorat
in x

Intr-un sir de caractere exista mai multe subsiruri

Ex: s: c o n c u r s ///
0 1 2 3 4 5 6 ///
s= adresa de inceput a sirului
s+4= adresa de inceput a sirului care incepe cu u
p=s+4;
cout<<p;///urs
cout<<*p; ///doar u

Operatii cu pointeri

1. Atribuirea : char *p, *q,s[101];


p=q;
q=s+i;/// o adresa de subsir din s
2. Compararea
if(p==q)
4. Incrementarea p++

De ex: Parcurgerea unui sir s cu un pointer

for(p=s;(*p)!='\0';p++)
prel(*p);

4. Diferenta a doi pointeri = numarul de octeti de


memorie dintre cele doua adrese memorate in pointeri

s: a d m i t e r e
p=s+3
q=s+6
q-p=3

Functii de prelucrare din <cstring>

1. n= strlen(s) => lungimea sirului s( cate caractere


efective are s)

strlen("computer")=8
01234567
Indicele ultimului caracter din s este = strlen(s)-1;

2. k= strcmp(s1,s2);///functie de tip operand

rezultatul va fi k (intreg) care


- daca k>0 spune ca s1>s2 in sens lexicografic( in
ordonare ca la catalog )
k=0 spune ca s1 coincide cu s2
k<0 atunci s1<s2 in sens lexicografic
Ex s1: albatros
s2:albinos
'a'<'i' => s1<S2<=>strcmp(s1,s2)<0

Exista si stricmp(s1,s2) in care se ignora diferenta de


case a caracterelor

stricmp("ana","ANA")=0

Stergerea caracterului din pozitia i se face cu

strcpy(s+i, s+i+1);

strcpy poate fi folosita si la inserarea in interiorul


unui sir

Ex. Se citeste un sir de caractere s de max 150 litere


mici si spatii. Sa se insereze dupa fiecare litera 'a'
cate o '* '.

Ex : caracatita => ca*ra*ca*tita*

#include <bits/stdc++.h>
using namespace std;
char s[301],t[301];
int i;
int main()
{
cin.getline(s,301);
i=0;
while(i<strlen(s))
if(s[i]=='a')
{
strcpy(t,s+i+1);
s[i+1]='*';
strcpy(s+i+2,t);
i=i+2;
}
else
i++;
cout<<s;
return 0;
}
4. Cautarea unui caracter intr-un sir( se va obtine
adresa din sir la care se gaseste prima data sau NULL,
daca nu se gaseste)
char s[10], c, *p;

p=strchr(s,c);

p= adresa din s la care caracterul c apare prima data


sau va fi NULL(0) daca c nu se afla in s
Exemple:

char s[21]="pbinfo";
char * p = strchr(s , 'i');
cout << p; // info

Test de vocala pentru un caracter dintr-un sir

if(strchr("aeiou",s[i])!=0) => s[i] este vocala

5.Cautarea unui sir in alt sir

char *strstr( char * s, char * t );


Caută șirul t în șirul al cărui prim caracter se află în
memorie la adresa din s.

Funcția returnează adresa NULL, dacă șirul t nu apare în


șirul s, respectiva adresa primei apariții al lui t în s,
dacă t apare în s.

Exemplu

char s[21]="pbinfo";
char * p = strstr(s , "inf");
cout << p; // info

6.Copierea

char* strcpy( char* dest, const char* src );

Copiază caracterele din șirul aflat la adresa src,


inclusiv caracterul nul, în șirul al cărui prim element
se află la adresa din dest.

Funcția returnează adresa dest.

char s[21], t[21] = "copil";


strcpy(s , "pbinfo");
cout << s; // pbinfo
strcpy(s , t);
cout << s; // copil
strcpy(s , t + 2);
cout << s; // pil
strcpy(s + 2 , t);
cout << s; // picopil
Copierea cu numarare strncpy

char *strncpy( char *dest, const char *src, std::size_t


count );

Exemplu

char s[100]="abcdefghjkl";
strncpy(s, "poveste", 3);
cout << s; // povdefghjkl

7. Concatenarea sirurilor

char *strcat( char *dest, const char *src );


Adaugă (concatenează) caracterele din șirul aflat la
adresa src, inclusiv caracterul nul, la șirul al cărui
prim element se află la adresa din dest.

Funcția returnează adresa dest.

Exemplu:

char s[21]="pbinfo", t[21] = "copil";


strcat(s , t);
cout << s; // pbinfocopil
strcat(s , t + 2);
cout << s; // pbinfocopilpil

8. Separarea entitatilor lexicale

char *strtok( char *str, const char *sep );


Funcția strtok extrage dintr-un sir de caractere câte un
subșir (cuvânt) delimitat de caractere din șirul sep.
Funcția se apelează în două moduri:

-primul apel are ca parametri șirul din care se face


extragerea și șirul separatorilor. La următoarele apeluri
primul parametru este NULL.
Rezultatul funcției strtok este adresa de început a
subșirului curent extras, sau NULL dacă nu se mai poate
extrage niciun subșir din șirul dat.

Șirul din care se face extragerea se modifică în urma


apelurilor. Dacă este nevoie de el mai târziu trebuie să-
i facem o copie.
Exemplu

Secvența de mai jos extrage dintr-un șir s cuvintele


(separate prin caractere din mulțimea {' ', ',', '.'}) și
le afișează pe linii diferite. Șirul s se presupune
declarat și citit.

char sep[]=" .,";


char * p = strtok(s , sep);
while(p != NULL)
{
cout << p << endl;
p = strtok(NULL , sep);
}

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