Sunteți pe pagina 1din 4

Laboratorul 13

1. Completai frazele urmtoare:


a) Un pointer este o variabil a crei valoare este _______ unei alte variabile.
b) Cele trei valori cu care poate fi iniializat un pointer sunt _______, _______ i
_______.
c) Singura valoare ntreag care poate fi asignat unui pointer este __.
2. Stabilii dac urmtoarele afirmaii sunt adevrate sau false. Motivai fiecare
rspuns fals.
a) Operatorul adres & poate fi aplicat constantelor.
b) Un pointer care este declarat de tip void poate fi derefereniat.
c) Pointerii de diferite tipuri nu pot fi asignai unul altuia fr o operaie prealabil de
cast.
3. Pentru fiecare dintre punctele urmtoare, scriei cte o instruciune care
realizeaz operaia indicat. Presupunei c au fost declarate variabilele n virgul
mobil number1 i number2 i c number1 a fost iniializat cu valoarea 7.3.
a) Declarai variabila fPtr ca un pointer la un obiect de tip double;
b) Asignai adresa variabilei number1 pointerului la variabila fPtr;
c) Tiprii valoarea obiectului la care pointeaz variabila fPtr;
d) Asignai valoarea obiectului la care pointeaz fPtr variabilei number2;
e) Tiprii valoarea lui number2;
f) Tiprii adresa lui number1;
g) Tiprii adresa stocat n fPtr. Valoarea tiprit este aceeai cu adresa lui
number1?
4. Gsii erorile din segmentele de program de mai jos. Presupunei c au fost
fcute urmtoarele declaraii:
int *zPtr; //zPtr va referi tabloul z
void *sPtr = 0;
int number, i;
int z[5] = {1, 2, 3, 4, 5};
zPtr = z;
sPtr = z;
a) //folosirea pointerului pentru a accesa
//prima valoare a tabloului
number = zPtr;
b) //asigneaza al doilea element al tabloului (valoarea 3)
// variabilei number
number = *zPtr[2];
c) //tipareste toate elementele tabloului z
for( i = 0; i <= 5; i++ )
cout << zPtr[i] << endl;
d) //asigneaza variabilei number valoarea obiectului la care
pointeaza sPtr

Programarea calculatoarelor i limbaje de programare I

number = *sPtr;
5. Prelucrarea string-urilor. Un string n C++ este un ir de caractere care se
termin cu caracterul null (\0). Un string poate fi accesat printr-un pointer la primul
su caracter. n C++, un string este un pointer constant la primul lui caracter, astfel
nct string-urile pot fi tratate ca i tablouri.
Citirea string-urilor se poate face cu ajutorul stream-urilor. Pentru string-ul
word[20], instruciunea de citire poate fi scris astfel:
cin >> word;
Manipulatorul setw se folosete pentru a fi siguri c string-ul introdus nu
depete dimensiunea alocat.:
cin >> setw(20) >> word;
n unele cazuri este necesar s introducem ntr-un tablou o ntreag linie de
text. Pentru aceasta se poate folosi funcia cin.getline care are trei parametri: numele
tabloului n care se pstreaz textul, lungimea acestuia i un caracter de delimitare:
char fraza[80];
cin.getline(fraza, 80, \n);
Funcia oprete citirea caracterelor atunci cnd ntlnete caracterul de
delimitare nainte de a fi citit cele 80 de caractere.
Biblioteca standard C++ definete o serie de funcii pentru manipularea stringurilor i sunt incluse n fiierul header cstring. Unele dintre aceste funcii folosesc
tipul de dat size_t care este un tip integral unsigned.
Prototipul funciei Descrierea funciei
char* strcpy(char* s1, const char* s2);
Copiaz string-ul s2 n tabloul de caractere s1. Este
returnat valoarea lui s1.
char* strncpy(char* s1, const char* s2, size_t n);
Copiaz cel mult n caractere ale string-ului s2 n tabloul s1.
Este returnat valoarea lui s1.
char* strcat(char* s1, const char* s2);
Adaug string-ul s2 la s1. Primul caracter al lui s2
suprascrie terminatorul de ir din s1. Este returnat
valoarea lui s1.
char* strncat(char* s1, const char* s2, size_t n);
Adaug cel mult n caractere din string-ul s2 la s1. Primul
caracter al lui s2 suprascrie terminatorul de ir din s1. Este
returnat valoarea lui s1.
char strcmp(char* s1, const char* s2);
Compar string-ul s1 cu s2. Funcia returneaz valoarea
zero, o valoare negativ sau o valoare pozitiv dac s1 este
egal cu s2, dac este mai mic sau este mai mare, respectiv.
Compararea se face dup codurile ASCII.
char strncmp(char* s1, const char* s2, size_t n);
Compar cel mult n caractere din string-ul s1 cu s2.
Funcia returneaz valoarea zero, o valoare negativ sau o
valoare pozitiv dac s1 este egal cu s2, dac este mai mic
sau este mai mare, respectiv. Compararea se face dup
codurile ASCII.
char* strtok(char* s1, const char* s2);

Programarea calculatoarelor i limbaje de programare I

O secven de apeluri ale lui strtok separ string-ul s1 n


tokeni elemente componente, de exemplu cuvinte dintr-o
linie de text delimitate prin caracteru coninut n string-ul
s2. Primul apel folosete s1 ca prim argument, iar apelurile
urmtoare continu s delimiteze tokenii aceluiai string. La
fiecare apel este returnat un pointer la tokenul curent. Dac
nu mai sunt tokeni n ir, se returneaz NULL.
Exemplu
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char x[] = "Happy Birthday to You";
char y[25], z[15];
cout << "String-ul din tabloul x este: " << x << endl
<< "String-ul din taboul y este: " << strcpy(y, x)
<< endl;
strncpy(z, x, 14); //nu copiaza caracterul NULL
z[14] = '\0';
cout << "String-ul din tabloul z este: " << z << endl;
return 0;
}
Programul afieaz:
String-ul din tabloul x este: Happy Birthday to You
String-ul din taboul y este: Happy Birthday to You
String-ul din tabloul z este: Happy Birthday
Exemplu
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char string[] = "Aceasta este o fraza cu 7 tokeni";
char *tokenPtr;
cout << "String-ul care va fi impartit in tokeni este: "
<< string << endl << endl
<< "Tokenii sunt: " << endl;
tokenPtr = strtok(string, " ");
while(tokenPtr != NULL)
{
cout << tokenPtr << endl;
tokenPtr = strtok(NULL, " ");
3

Programarea calculatoarelor i limbaje de programare I

}
return 0;
}
Programul afieaz:
String-ul care va fi impartit in tokeni este: Aceasta este o
fraza cu 7 tokeni
Tokenii sunt:
Aceasta
este
o
fraza
cu
7
tokeni
Gsii erorile din segmentele de program de mai jos.
a) char s[50];
cout << strncpy(s, hello, 5) << endl;
b) char s[12];
strcpy(s, Welcome Home);
c) if(strcmp(string1, string2))
cout << String-urile sunt egale << endl;

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