Documente Academic
Documente Profesional
Documente Cultură
Ex: Int p1, p2
Ex: Int p1, p2
Obs. 3.Tipul de baz al pointerului poate fi orice tip al limbajului inclusiv tipul void.
Un pointer cu tipul de baz void* se numete pointer generic.
4.Exist o constant pointer special, denumit NULL, cu semnificaia pointerul
nu conine adresa nici unei zone de memorie; valoarea acestei constante este 0.
Operaii cu pointeri
1. Operaia de refereniere
-este operaia prin care putem obine adresa de memorie a unei variabile
-adresa unei variabile se poate obine cu ajutorul operatorului unar & care va precede
numele variabilei; rezultatul acestei operaii este un pointer
ex: int *p,a;
p=& a;
// p va reine adresa lui a
2. Operaia de derefereniere
-este operaia prin care putem accesa coninutul memorat la o anumit adres
-operaia se realizeaz folosind operatorul unar * care va precede numele variabilei
ex: int *p,a;
p=& a;
// p va reine adresa lui a
*p=3;
cout<<a;
//va afia pe ecran valoarea 3
3. Operaia de incrementare/decrementare
-are ca efect indicarea elementului urmtor/anterior celui indicat de pointerul iniial
n limbajul C++
-se utilizeaz operatorul de afiare
cout<<r;
m
0
a
1
m
2
a
3
\0
4
Dimensiunea vectorului de caractere trebuie declarat cu un caracter mai mult dect cel mai
mare ir de caractere pe care l poate conine, pentru a exista loc i pentru terminatorul
irului (caracterul \0).
O constant ir de caractere este o succesiune de caractere delimitat de ghilimele.
ex: char ir[256]=Buna ziua;
Citirea
n limbajul C++
-se poate utilize operatorul >> sau
funciile get sau getline
n limbajul C
-se folosete specificatorul de format %c
pentru caractere i %s pentru iruri
char c, sir[201];
char c, sir[201];
fin>>c;
fin.getline(sir, 200);
//sau fin.get(sir,200);fin.get();
fscanf(fin,%c, &c);
fscanf(fin,%s,sir);
n limbajul C
fprintf(fout, %c, c);
fprintf(fout, %s, sir);
puts(sir);
Obs.
1. Citirea irurilor de caractere la care se utilizeaz operatorul >> se oprete la ntlnirea
primului caracter alb.
2.Dac delimitatorul este altul dect \n, acesta trebuie precizat pe poziia corespunztoare
lui n funcia getline.
ex:getline(sir,200,!);
2.Dac dorim s concatenm doar primele n caractere din irul surs la irul destinaie i
lungimea irului surs este <n atunci se va concatena ntreg irul surs la destinaie, inclusiv
caracterul NULL.
4.Compararea a dou iruri de caractere
int strcmp(char * s1, char * s2);
// compar irul s1 cu irului s2 i returneaz, astfel:
valoarea 0 dac s1 este egal cu s2
un ntreg >0 dac s1>s2 (dpdv lexicografic)
un ntreg <0 dac s1<s2
int strncmp(char * s1, char * s2, int n);
// compar primele n caractere din cele dou iruri
ex: char sir[]="harpa",sir1[]=harnic;
int n=3;
if (strcmp(sir, sir1)==0)
cout<<egale;
else if (strcmp(sir, sir1)<0)
cout<<sir<<<<<sir1;
else
cout<<sir1<<<<<sir;
cout<<\n;
if (strncmp(sir, sir1, n)==0)
cout<<sunt egale primele<<n<<caractere din sirurile<<sir<<si<<sir1;
else if (strcmp(sir, sir1)<0)
cout<<sir<<<<<sir1;
else
cout<<sir1<<<<<sir;
Obs.
Dac dorim ca la comparare s nu se fac diferena ntre litere mari i mici, atunci vom
folosi funcia stricmp.
int stricmp(char * s1, char * s2);
5.Cutarea primei apariii a unui caracter ntr-un ir
char* strchr(char * s, char x);
//caut i returneaz un pointer ctre prima apariie a caracterului x n irul s; dac
caracterul x nu se gsete n irul s, funcia va returna NULL
ex: char sir[]="Sambata merg la CEX",x, *p;
x=a;
p=strchr(sir, x);
if (p!=0)
cout<<x<<apare prima data in <<sir<<pe pozitia<<p-sir;
else
cout<< x<<nu apare deloc in <<sir;
cout<<\n;
6.Cutarea primei apariii a unui ir n alt ir
char* strstr(const char * s1, const char * s2);
//caut i returneaz un pointer ctre prima apariie a irului s2 n irul s1; dac s2 nu se
gsete n irul s1, funcia va returna NULL
ex: char sir[]="Sambata merg la CEX",sir1[]=merg, *p;
p=strstr(sir, sir1);
if (p!=0)
cout<<sir1<<apare prima data in <<sir<<pe pozitia<<p-sir;
else
cout<< sir1<<nu apare deloc in <<sir;
cout<<\n;
7. Transformarea literelor mici n litere mari i invers
char* strlwr(char* s);
// transform toate literele irului n litere mici
char* strupr(char* s);
// transform toate literele irului n litere mari
8.Inversarea irului
char* strrev(char* s);
// inverseaz irul n el nsui
ex: char sir[]="sambata";
strrev(sir);
cout<<sir<<\n; // va scrie atabmas
9.Funcii de conversie
Fiierul antet stdlib.h conine funcii care realizeaz conversia unui numr ntreg sau real
n ir de caractere i invers.
char * itoa(int n, char* sir, int baza);
char * ltoa(long n, char* sir, int baza);
char * utoa(unsigned long n, char* sir, int baza);
// funciile permit conversia unui numr ntreg n ir de caractere; numrul
obinut se va afla n baza indicat
int atoi(char* sir);
long atol(char* sir);
double atof(char* sir);
long strtol(char* s, char* p, int baza);
// funciile permit conversia n ir de caractere a unui numr ntreg;
// funcia strtol returneaz prin pointerul p adresa primului caracter din sirul s
care nu a putut fi convertit
Probleme propuse
1.Problema ION
Vi se dau mai multe succesiuni cu acelai numr de litere mici pe care trebuie s le aezai
unele sub altele. n careul astfel format trebuie s cutai un anumit cuvnt. Cutarea se face
att pe orizontal (linie) ct i pe vertical (coloan) iar cuvntul poate aprea de la dreapta
la stnga, de la stnga la dreapta, de jos n sus sau de sus n jos. S se numere liniile i
coloanele pe care cuvntul apare cel puin o dat.
Cerin
Cunoscnd cuvntul c care trebuie cutat, numrul n de succesiuni de n litere precum i cele n
succesiuni, se cere s se determine pe cte linii i coloane apare cuvntul dat.
Date de intrare
Pe prima linie a fiierului de intrare cuvant.in se afl un cuvnt c format din litere mici. Pe
linia a 2-a se gsete un numr natural n iar pe urmtoarele linii se dau cele n succesiuni de
cte n litere mici fiecare.
Date de ieire
Fiierul de ieire cuvant.out va conine numrul de linii i coloane pe care apare cuvntul dat.
Restricii
Cuvntul c are maxim 20 de litere iar n nu depaeste 100.
Exemplu
cuvant.in
ion
6
ionabc
ajonoi
uuiono
aixbnn
ionnoi
cnrsit
cuvant.out
8
Explicatii
Aezm succesiunile de litere unele sub altele, ca n careul de mai
jos:
i
o n a b c
a j o n o i
u u i
o n o
a i
x b n n
i
o n n o i
c n r
s i t
Cuvntul ion se gsete pe liniile 1 i 3 (de la stanga la dreapta), pe
linia 2 (de la dreapa la stnga), pe linia 5 (pe ambele direc), pe
coloanele 2 i 6 (de sus n jos) i pe coloanele 3 i 5 (de jos n sus),
deci n total pe 8 direcii.
Expresia poate avea maxim 10000 de caractere i este corect din punct de vedere
matematic.
0< n , m <1000
Valorile care rmn sub radical, sunt numere naturale < 1000
Exemplu
radical.in
4r12+r75-2r3+1+2r20+2r4
radical.out
5+11r3+4r5
3.alfabetar
http://campion.edu.ro/arhiva/index.php?page=problem&action=view&id=1200
4.grad
http://campion.edu.ro/arhiva/index.php?page=problem&action=view&id=143
5.comp
http://campion.edu.ro/arhiva/index.php?page=problem&action=view&id=1241
6.ed
http://campion.edu.ro/arhiva/index.php?page=problem&action=view&id=296
7.secvsir
http://campion.edu.ro/arhiva/index.php?page=problem&action=view&id=969
8.cezar
http://campion.edu.ro/arhiva/index.php?page=problem&action=view&id=647