Sunteți pe pagina 1din 8

tipul char

obs: caracterele tiparibile de la tastatura au asociat un cod (nr cuprins intre 0


si 255) numit COD ASCII

ex:'a'-->97 'A'-->65
'b'-->98 'B'-->66
...

'0'-->48
'1'-->49
...

'a'<'b'
'a'>'A'

obs: litera mare+32=litera mica


cifra ='cifra'-48

ex: 2='2'-48=50-48
3='3'-48=51-48

obs: tipurile int si char sunt compatibile:

ex: int x=65;


char c;
c=x;
cout<<c; -->'A'
c++;
cout<<c; -->'B'

int c='D';
cout<<c; -->68

<ctype.h> ->functii predefinite pentru prelucrarea caracterelor

1. if(isdigit(c)) -->verif daca c e cifra


if(c>='0'&&<='9') -->analog

2. if(islower(c)) -->verif daca c e litera mica


if(c>='a'&&c<='z')

3. if(isupper(c)) -->verif daca c e litera mare


if(c>='A'&&c<='Z')

4. if(isalpha(c)) -->verif daca c e litera


if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))

c=tolower(c); -->transf c in litera mica


sau
c=c+32;

c=toupper(c); -->transf c in litera mare


sau
c=c-32;

siruri de caractere (vectori de tip char)

def: se numeste sir de caractere un vector de tip char


1.declarare: char nume[dim];

obs: orice sir de caractere se termina cu caracterul nul ('\0') deci trebuie sa
aiba si acesta spatiu alocat in memorie

ex:"se citeste un sir de maxim 20 caractere..."

char s[21];

obs: un sir de poate declara si dinamic, cu ajutorul pointerilor:

char *nume;

2.citirea unui sir

- daca sirul nu are spatii ("se citeste un cuvant")

cin>>s;

- daca sirul are spatii ("se citeste o propozitie/fraza, etc")

cin.get(s,dim);

ex: char s[15];


cin.get(s,15);

obs: daca avem de citit succesiv mai multe siruri prin cin.get, instructiunile de
citire corespunzatoare vor fi intercalate de cin.get();

ex: char s1[20],s2[13],s3[18];


cin.get(s1,20);
cin.get();
cin.get(s2,13);
cin.get();
cin.get(s3,18);

analog putem citi succesiv mai multe siruri astfel (de testat!):

cin.getline(s1,20);
cin.getline(s2,13);
cin.getline(s3,18);

3. afisarea unui sir:

cout<<s;

4. prelucrarea caracter cu caracter a unui sir:

for(i=0;i<strlen(s);i++)
//prelucram s[i]

obs:
- constantele de tip char se scriu intre apostrofuri iar cele de tip sir de
caractere intre ghilimele:

char x='a',s[]="ana are mere"

- sir+nr= subsirul care incepe de la pozitia nr din sirul dat


ex: s="ana are mere"
0123456789
s+3=" are mere"
012345678
(s+3)[1]='a'
(s+3)[5]='m'
s+5="re mere"

Functii predefinite de prelucrare a sirurilor de caractere

A. incluse in <cstring> sau <string.h>

a. strlen(s) - lungimea efectiva a sirului s

ex: strlen("mouse")=5

b. strcpy(s1,s2); copie s2 in s1

ex: char s1[]="toamna",s2[]="acasa";


strcpy(s1,s2);
cout<<s1; -->acasa

obs: strcpy(s+i,s+i+1); -->se elimina s[i];

b'. strncpy(s1,s2,nr); -->copie in s1 primele nr caractere din s2

ex:char s1[]="toamna",s2[]="acasa";
strncpy(s1,s2,3); -->s1="aca"

c. strcat(s1,s2); -->adauga la sf lui s1 sirul s2

ex:char s1[]="toamna",s2[]="acasa";
strcat(s1,s2);
cout<<s1; -->toamnaacasa

c' strncat(s1,s2,nr); --> adauga la sf lui s1 primele nr caractere din s2

ex: char s1[]="toamna",s2[]="acasa";


strncat(s1,s2,3);
cout<<s1; -->toamnaaca

d. strrev(s); -inverseaza sirul s

ex: char s[]="marker";


strrev(s);
cout<<s; -->rekram
e. strlwr(s);--> transforma literele mari din s in litere mici, restul caract
ramanand neschimbate

char s[]="sdhAAS123"
strlwr(s);
cout<<s; sdhaas123

f. strupr(s);-->transforma literele mici din s in litere mari, restul caract


ramanand neschimbate
char s[]="sdhAAS123"
strlwr(s);
cout<<s; SDHAAS123

g. strcmp (s1,s2) -->compara doua siruri dpdv lexicografic (alfabetic)

strcmp(s1,s2) = >0 daca s1>s2


=0 daca s1=s2
<0 daca s1<s2

ex:s1="daniel"
s2="boros"

'd'>'b' -->s1>s2

s1="octombrie"
s2="septembrie"

's'>'o' -->s2>s2

s1="alfabet"
s2="alfabetic"

s2>s2

s1="ionica"
s2="ioana"

'n'>'a'-->s1>s2

s1="Ionica"
s2="ionica"

s2>s1 pt ca 'i'>'I'

g'. stricmp(s1,s2) -->compara doua siruri dpdv lexicografic fara a face distinctie
intre literele mari si mici

h. functii de cautare

- a unui caracter intr-un sir

1. strchr(s,c)
2. strrchr(s,c)

- a unui subsir intr-un sir

3. strstr(s1,s2)
4. strrstr(s1,s2)

-->rezultatul cautarii este subsirul care incepe cu prima/ultima aparitie a


caracterului c in sirul s (la fct 1 si 2) sau 0 (sirul NULL) daca c nu se afla in
s. Fct 3 si 4 lucreaza analog.

ex:
char s[]="abracadabra",c='b';
cout<<strchr(s,c); -->"bracadabra"
cout<<strrchr(s,c); -->"bra"
cout<<strchr(s,'x'); -->0

ex: if(strchr("aeiou",c)!=0)
cout<<c <<"e vocala";

ex: char s1[]="abracadabra", s2="br";


cout<<strstr(s1,s2); -->"bracadabra";
cout<<strrchr(s1,s2);-->"bra";

i. strtok(sir,sep) -->extrage din sirul dat subsiruri (cuvinte) delimitate de


caractere din sirul sep (care au rol de sepatarori)

ex: se da un text in care cuvintele sunt separate prin ' ',',',';','?','.'. Sa se


afiseze cuvintele textului unul sub altul.

char s[100], *p, sep[]=" ,;.?";


cin.get(s,100);
p=strtok(s,sep); //extrage primul cuvant
while(p!=NULL) //cat timp gasim cuvinte in text
{cout<<p<<endl;
p=strtok(NULL,sep);//se extrage urmatorul cuvant
}

ex: cate cuvinte incep cu "A"?

char s[100], *p, sep[]=" ,;.?";


int nr=0;
cin.get(s,100);
p=strtok(s,sep); //extrage primul cuvant
while(p!=NULL) //cat timp gasim cuvinte in text
{
if(p[0]=='A')
nr++;
p=strtok(NULL,sep);//se extrage urmatorul cuvant
}
cout<<nr;

B. incluse in <stdlib.h> (functii de conversie)

a. din sir in numar:

x=atoi(s);
x=atof(s);
x=atol(s);
x=atold(s);

-transforma un sir s intr-un numar (x) de tip int/float/long/long double. Daca s


contine si alte caractere decat cifre, conversia esueaza si rezultatul e 0

ex: x=atoi("123"); -->x=123


x=atoi("1a23"); -->x=0

b. din numar in sir

itoa(nr, sir, baza);


ltoa(nr, sir, baza);
ultoa(nr, sir, baza);

-convertesc un numar "nr", scris in baza "baza" (de obicei 10) intr-un sir de
caractere

ex: itoa(123,s,10); -->s="123"

ex: se da un nr natural n. sa se verifice daca n este palindrom.

int n,m;
char s[10];
cin>>n; //n=12335
itoa(n,s,10); //s="12335"
strrev(s); //s="53321"
m=atoi(s); //m=53321
if(n==m) //se compara n cu m (12335 cu 53321)
cout<<"palindrom";
else
cout<<"nu e palindrom"; //se af "nu e palindrom"

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