Sunteți pe pagina 1din 6

sir de caractere = STRING

int v[100]

char c[100] = “copac”

char c[] = “copac”

char c[] = {‘c’, ‘o’, ‘p’, ‘a’, ‘c’, ‘\0’}

cout << c;
cin >> c;
cin.getline(c, 100)
“copac”
cout << c[3] => “a”
“corac”
c[2] = ‘r’

char *q, s[] = “pbinfo”


_ _ _ _ _ _ _ _ p b I n f o \0 _ _ _ _ _ _
0 1 2 3 4 5 6 7 8 9 …..
“binfo”
q = s // 8
cout << q // pbinfo cout << s
q++; c++
cout << q // binfo cout << s

Functii
Functii de identificare - caractere
- int isalnum(int ch) -> daca caracterul dat ca parametru este alphanumeric (cifra/litera)
returneaza 0 daca nu este, altfel returneaza altceva
isalnum(cod ascii ‘$’) = 0
isalnum(cod ascii ‘1’) = 3
- int isalpha(int ch) -> litera mare/mica
returneaza 0 daca nu este, altfel returneaza altceva
- islower(int ch) -> litera mica
- isupper(int ch) -> litera mare
- isdigit(int ch) -> cifra
Functii de transformare – caractere
- int tolower(int ch) -> converteste la litera mica
o daca ch e litera mare, returneaza codul ascii al literei mici coresp
o daca ch nu e litera mare, ii returneaza propriul cod ascii
- int toupper(int ch) -> converteste la litera mare
Functii de identificare pentru siruri de caractere
- strlen(str) -> returneaza lungimea sirului (! ‘\0’ nu se numara printre ele)
strlen(“copac”) = 5
- strchr(str, ch) -> returneaza adresa primei pozitii in string la care gaseste caracterul,
daca nu il gaseste returneaza NULL
strchr(“pbinfo”, ‘i’) = 2
ex: ca sa verifici ca un caracter se afla intr-un string:
if(strchr(“pbinfo”, ‘i’) != NULL) cout << “DA”;
else cout << “NU”;
- char* strstr(str1, str2) -> returneaza pointerul la care se gaseste sirul str2 in str1
char *p = strstr(“pbinfo”, “inf”)
cout << p // info => afiseaza in principiu pana la ‘\0’
- strcmp(str1, str2)
o daca str1<str2 => ceva negative
o str1>str2 => ceva pozitiv
o str1=str2 => 0

“copac” > “Andrei”


“Ana” < “Anisoara”
“copac” = “copac”
strcmp(“abur”, “abecedar”) = ceva pozitiv (primul e mai mare lexicografic decat al doilea)
Functii de transformare – siruri de caractere
- strcpy(dest, src) -> copiaza caracterele din src in dest (cu tot cu ‘\0’)
- char s[21], t[21] = "copil";
- strcpy(s , "pbinfo");
- cout << s; // pbinfo
- strcpy(s , t); // din t in s
- cout << s; // copil
- strcpy(s , t + 2);
- cout << s; // pil
- strcpy(s + 2 , t);
- cout << s; // picopil

‘\0’ = caracterul nul


s=picopil
! daca dest si src se suprapun la aceeasi pozitie in memorie, atunci comportamentul lui strcpy
este nedefinit
- strcnpy (dest, src, count) -> copiaza cel mult count caractere din src in dest
!!!!!!!!!!! in dest nu se va pune si \0
abecedar
copil
6 caractere in dest
strcnpy(“copil”, “abecedar”, 6)
dest = “abeced”
- strcat(dest, src) -> concateneaza src (inclusive ‘\0’) dupa dest
char s[] = “ana”, t[] = “are”;
strcat(s, t)
cout << s // anaare
strcat(s, t+2)
cout << s // anaaree
- strtok(str, char* sep) -> extrage din str subsiruri separate prin sep (delimitatori)
char sep[]=".,";
char * p = strtok(s , sep);
while(p != NULL)
{
cout << p << endl;
p = strtok(NULL , sep);
}

“carpe diem”

cand punem ghilimele intr-un string, trebuie sa le dam ESCAPE: \”

sep[] = “\” “

sep[] = “\\”

sep[] = “\\n”

Eliminarea unui caracter dintr-un sir s de pe pozitia x:

char s[256], t[256];


int x;
// ...
//eliminarea
strcpy(t , s + x + 1); // aux (t) = partea din s de la dreapta caracterului de pe poz
x, fara acel caracter
strcpy(s + x , t); // in s+x copiem t-ul (copiem peste x partea din dreapta lui x)

s = “copac”

x = 3 -> litera a

t = “c”

_____copac_______

012x4

s c \0

s = “copc”
Inserarea unui caracter intr-un sir (copiac)

char s[256], t[256];


int x;
// ...
//inserarea
strcpy(t , s + x); // partea din dreapta lui x, inclusiv x
strcpy(s + x + 1 , t);
s[x] = 'A'; // echivalent, *(s+x) = 'A';

_____copac_______

012x4

t = “ac”

s = “copaac”

s[3] = ‘i’

s = “copiac”

s = “copac\0”

s+1 = “opac”

s+2 = “pac”

s+3 = “ac”

s+4 = “c”

s+5 = “\0”

s+4 = “\0”

copa\0

cout << s+strlen(s) \\

_ _ _ _ c o p a c \0 _ _ _ _

0 1 2 3 4 5 _ _ _ _ s=23457 s+1=23458 ….

s s+1…..

strcpy(s,s+1)

s+1 = “opac\0”

s = “copac\0”
 s = “opac\0”

01234

o p a \0

strcpy(s+strlen(s)-1, s+strlen(s))

s+strlen(s) = “\0”

s+strlen(s) – 1 = “c\0”

 s+strlen(s) – 1 = “\0”

cout << s  for(i=0;i<strlen(s);i++)cout << s[i];

s=”copac”

strcpy(s, strchr(s, s[strlen(s)-1])+1)

strchr(s, s[4]) = strchr(“copac”, “c”) = s

strcpy(s, s+1)

d)

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