Sunteți pe pagina 1din 7

SIRURI DE CARACTERE Def : Un sir de caractere = succesiune de caractere cuprinse intre ghilimele Obs : biblioteca pentru siruri de caractere

: cstring \0 = sfarsitul de sir, acest caracter exista dar nu este vizibil a diferenta a, primul = caracterul a, se retine 1 octet pentru reprezentare; al doilea = sirul de caractere format din a si sfarsitul de sir tip *p; => in p retin o adresa(ex : int *a;char *s;) Definim : char s[1000], *sir; s[1000]=sir de caractere cu cel mult 1000 de caractere ( vector de caractere ) spatiu de memorie retinut = sizeof(char)*dim =1*1000=octeti *sir = adresa de inceput a unui sir de lungime variabila prelucrarea sirurilor de caractere se realizeaza folosind functii de biblioteca cstring exista un tip d date specific sirului de caractere : size_t(unsigned) SIRURILE DE CARACTERE SE INITIALIZEAZA DIN POZITIA 0 tip de date structurat ( simple: intregi, reale )

1.Citirea sirului de caractere : 1.1 De la tastatura iostream: char s[100]; cin>>s; s=retine sirul de v=caractere pana la spatiu sau Enter Ex: Ana are mere => s= Ana cin.get(sir, dim); cin.get(s,100); s = sirul retinut pana la Enter Ex: Ana are mere => s=Ana are mere 1.2 Din fisier ifstream f(sir.in); f>>s; f.get(s, 100) s=sirul pana la spatiu sau Enter s=sirul pana la Enter

2.Afisarea sirului de caractere : monitor : cout<<s;

fisier :

g<<s;

FUNCTII PENTRU PRELUCRAREA SIRURILOR DE CARACTERE

1.Functii de copiere char *strcpy(char *d, const char *s) char *strncpy(char *d, const char *s, size_t lung); Ex : char *s=informatica, *d; strcpy(d,s)=>d=informatica; strncpy(d,s,4)=>d=info; copiaza in primul parametru(sirul destinatie) continutul celui de-al doilea parametru(sirul sursa) d se modifica, s ramane constant strcpy = copiaza tot sirul s in sirul d strncpy = copiaza primele lung caractere din sirul s in sirul d

i s -

r s+i

i s+i+j

Stergerea caracterelor din sir folosing strcpy strcpy(s,s+i);=mutarea adresei s peste i caractere ( octeti ) => efect nu se mai vizualizeaza primele i caractere => s-au sters primele i caractere

rezultatul este retinut tot in s strcpy(s, s+4)=> s=rmatica; strcpy(s+i,s+i+j); = se pierd caracterele de pe pozitiile i, i+1, i+2,,i+j-1 sirul s va avea : s*0+, s*1+,,s*i-1+, s*i+j+, s*i+j+1+

2.Functii de concatenare char *strcat(char *d, const char *s) char *strncat(char *d, const char *s, size_t lung); in sirul d se retine vechiul continut al lui d urmat de sirul s sau urmat de primele lung caractere din sirul s

Ex : char *s1=proba, *s2=informatica; strcat(s, la ); strcat(s1,s2); strncat(s1, s2, 4) s1=proba la info

s1=proba la informatica

3. Functia de lungime a sirului de caractere size_t_strlen(const char *s); returneaza lungimea sirului de caractere !!! nu se numara \0 parcurgerea unui sir de caractere : for(i=1;i<strlen(s);i++) // i pe toata lungimea sirului

s[i] = caracterul de pe pozitia i; for(i=0;s[i]!=0;i++) s[i] primul caracter din sir = s[0] ultimul caracter din sir = s[strlen(s)-1] // conditia = s-a sfarsit sirul s[i] != adresa 0 = NULL

4.Functii de conversie char *strupr(char *s); char *strlwr(char *s); Ex : char *s=InFORmaticA; strupr(s) => s=INFORMATICA; strlwr(s) => s=informatica; prelucrare la nivel de caractere : ctype cctype in MinGW functiile de interogare : is(ch) functii de conversie functiile de interogare : strupr = transforma literele mici ale alfabetului englez in litere mari strlwr = transforma literele mari ale alfabetului englez in litere mici celelalte caractere diferite de litere sunt omise rezultautl este retinut tot in sirul s

char ch; isalpha(ch) ch=az, AZ isalnum(ch) ch=litera sau cifra 09 isupper(ch) ch=litera mare islower(ch) ch = litera mica isdigit(ch) ch = cifra in baza 10 0 ..9

isxdigit(cg) ch = cifra in baza 16 => 09,a,b,c ,d,e,f isspace(ch) ispunct(ch) is(ch) !=0 ch este caracterul cerut ==0 ch nu este caracterul cerut intrebari folosing intervalul de valori : if(ch>=a && ch<=z || ch>=A && ch<=Z)

Functii de conversie : ch = toupper(ch); ch = tolower(ch); strupr(s) for(i=1;i<strlen(s);i++) if(oslower(s[i])!=0) s[i]=toupper(s[i]);

5.Functii de cautare 5.1 caracter in sir char *strchr(char *s, int ch); char *strrchr(char *s, int ch); strchr = cauta prima aparitie a caracterului ch in sirul s si returneaza subsirul format de la prima aparitie pana la sfarsit sau 0(NULL) daca ch nu este in sir strrchr = cauta ultima aparitie a caracterului ch in sirul s si returneaza subsirul format de la ultima aparitie pana la sfarsit sau 0(NULL) daca chef nu este in sir

Ex : 100 i n 101 f 102 o 103 r 104 105 m a 106 t i c i a n

s char *s=informatician, *p; p=strchr(s, a )=>p=atician p=strrchr(s, a )=>p=an p-s=106-100=6 s[p-s+=a p-s=pozitia in sir a caracterului cautat p=strchr(s, x)=NULL=0 ex 2 => vezi str

5.2 subsir in sir char *strstr(char *s, char *subsir); char *strrstr(char *s, char *subsir); strchr = cauta prima aparitie a subsirului subsir in sirul s si returneaza subsirul format de la prima aparitie pana la sfarsitul sau 0 (NULL ) daca subsir nu este in sir strrstr = cauta ultima apartie a subsirului subsir in sirul s si returneaza subsirul format de la ultima aparitie pana la sfarsit sau 0 ( NULL ) daca subsir nu este in sir Ex : char *s=informatician, *p; p=strstr(s, or); => p = ormatician p-s = pozitia de la care incepe subsirul in sirul s 6.Functia de oglindire char *strrev(char *s); Ex : strrev in s se retine sirul obtinut prin oglindire

7.Functii de comparare int strcmp(const char *s1, const char *s2); int stricmp(const char *s1, const char *s2); int strncmp(const char *s1, const char *s2, size_t lung); int strnicmp(const char *s1, const char *s2, size_t lung); Def : Sirul s1 < s2 dpv lexicografig exista j indice astfel incat s1*0+=s2*0+, s1*1+=s2*1+s1*j-1]=s2[j-1] si s1[j]<s2[j] ( comparatia se realizeaza la nivel de caracter cod ASCII ) <0 s1<s2 ==0 s1=s2 >0 s1>s2 strcmp = comparatie facand distinctie intre litere mari si mici strcmp = comparatie fara a face distinctie intre litere mari si mici strncmp = strcmp pe primele lung caractere din siruri strnicmp = stricmp pe primele lung caractere

Ex : char *a=aBcde, *b=Abcd; strcmp(a,b) > 0 stricmp(a,b) > 0 strncmp(a,b, 4) > 0 strnicmp(a,b,4) = 0 8.Functia de separare subsiruri dintr-un sir char * strtok(char *sir, const char *separatori); 8.1 strtok cu while : char *s, *p, *sep; p=strtok(s, sep); while(p!=0) { prelucrare p //p !=NULL

p=strtok(NULL, sep); } 8.2 strtok cu for : for(p=strtok(s, sep); p!=0;p=strtok(NULL,sep)) prelucrare p Ex : strtok Obs : Sirul initial se modifica, devine vid;