Sunteți pe pagina 1din 6

În C++ există mai multe modalități de a reprezenta șirurile de caractere.

În
acest articol vom discuta despre șirurile de caractere reprezentate ca
tablouri unidimensionale cu elemente de tip char, reprezentare care provine
din limbajul C.

Aceste șiruri se mai numesc null-terminated byte string (NTBS). În


reprezentarea internă, după ultimul caracter (byte, octet) valid din șir se află
caracterul '\0' – caracterul cu codul ASCII 0, numit și caracter nul.

Astfel, pentru reprezentarea în C/C++ a cuvântului copil, care


are 5 caractere, se vor folosi 6 octeți, cu valorile: 'c', 'o', 'p', 'i',
'l', '\0'.

Declararea unui șir de caractere

Un șir de caractere se declară în C++ astfel:

1.char s[11];
S-a declarat un șir care poate memora maxim 11 caractere, cu indici 0 1
... 10. Șirul s poate memora cel mult 10 caractere utile, după ultimul
caracter util fiind memorat caracterul '\0'.

De asemenea, la declararea unui șir acesta poate fi inițializat. Următoarele


exemple declară șiruri de caractere și le inițializează cu șirul "copil":

1.char s[11] = "copil"; // se folosesc doar 6 caractere


2.char t[]="copil"; // se aloca automat 6 octeti pentru
sirul t: cele 5 litere si caracterul nul \0
3.char x[6]={'c','o','p','i','l','\0'}; //
initializarea este similara cu cea a unui tablou
oarecare - sirurile de caractere sunt tablouri
4.char z[]={'c','o','p','i','l','\0'}; // se aloca
automat 6 octeti pentru sir

Afișarea și citirea unui șir de caractere

Afișarea unui șir de caractere


Se poate face cu operatorul << de inserție în stream:

1.cout << s << endl;

Citirea unui șir de caractere

Se poate folosi operatorul >> de extracție din stream:

1.cin >> s;
În acest mod, datorită specificului operatorului >> nu se pot citi șiruri care
conțin spații – se vor citi caracterele până la primul spațiu, fără acesta.

Pentru a citi șiruri care conțin spații, putem folosi metoda getline a
obiectului cin sau alt obiect de tip istream:

1.istream& getline (char* s, streamsize n );


Se vor citi în șirul s caracterele din stream-ul de intrare (de la tastatură) până
la apariția caracterului sfârșit de linie '\n', dar nu mai mult de n-
1 caractere. Caracterul '\n' nu va fi adăugat la șirul s, dar va fi extras din
stream. De exemplu:

1.cin.getline(s , 11);
Am putea spune că getline citește toată linia și sare peste ENTER. Iată un
exemplu complet:

01.#include <iostream>
02.using namespace std;
03.int main(){
04.char nume1[31], nume2[31];
05.cout << "Cum te cheama? (nume, prenume) ";
06.cin.getline(nume1, 31);
07.cout << "Cum il cheama pe prietenule tau? ";
08.cin.getline(nume2 , 31);
09.cout << "Te numesti " << nume1 << endl;
10.cout << "Esti prieten cu " << nume2 << endl;
11.return 0;
12.}
O altă modalitate de citire a unui șir care poate conține spații este folosirea
metodei get a obiectului istream, pe care nu o mai prezentăm aici.

Referirea unui caracter din șir. Parcurgerea unui șir de caractere

Deoarece șirurile de caractere sunt de fapt tablouri, pentru referirea unui


caracter din șir se folosește operatorul [], ca în exemplul următor:

1.char s[]="abac"; // sirul consta din 5 caractere:


cele 4 litere si caracterul nul '\0'
2.cout << s[3]; // c
3.s[1] = 'r';
4.cout << s; // arac
5.cout << s[10]; // ??? comportament impredictibil: nu
exista in sir caracter cu indice 10
În numeroase situații este necesară analizarea fiecărui caracter din șir.
Pentru aceasta este necesară o parcurgere a șirului; aceasta se face similar
cu parcurgerea unui tablou oarecare. Diferența constă în faptul că, pentru
șirul de caractere nu se cunoaște explicit lungimea. Ea poate fi determinată
cu funcția strlen (vezi mai jos), dar putem controla parcurgerea șirului
știind că după ultimul caracter valid din șir apare caracterul nul '\0'.

Următoarele exemple parcurg un sir de caractere și afișează caracterele


separate prin spații:

1.char s[11];
2.cin >> s; // se citeste un cuvant , fara spatii
3.int i = 0;
4.while(s[i] != '\0')
5.{
6.cout << s[i] << " ";
7.i ++;
8.}
sau mai condensat:

1.char s[11];
2.cin >> s; // se citeste un cuvant , fara spatii
3.for(int i = 0 ; s[i] ; i ++)
4.cout << s[i] << " ";

Funcții pentru șiruri de caractere

strlen

Returnează lungimea șirului str, adică numărul de caractere din șirul al


cărui prim caracter se află la adresa memorată în str. Caracterul nul nu se
numără.

Exemple:
1.cout << strlen("pbinfo"); // 6
2.char s[10]="copil";
3.cout << strlen(s); // 5
4.cout << strlen(s + 2); //3

strcpy

Exemple:
01.char s[21], t[21] = "copil";
02.strcpy(s , "pbinfo");
03.cout << s; // pbinfo
04.strcpy(s , t);
05.cout << s; // copil
06.strcpy(s , t + 2);
07.cout << s; // pil
08.strcpy(s + 2 , t);
09.cout << s; // picopil

strncpy

Exemple:
1.char s[100]="abcdefghjkl";
2.strncpy(s, "poveste", 3);
3.cout << s; // povdefghjkl

strcat

Exemple:
1.char s[21]="pbinfo", t[21] = "copil";
2.strcat(s , t);
3.cout << s; // pbinfocopil
4.strcat(s , t + 2);
5.cout << s; // pbinfocopilpil

Strchr Caută un character. Funcția returnează adresa NULL, dacă


caracterul ch nu apare în șirul str

Exemple:
1.char s[21]="pbinfo";
2.char * p = strchr(s , 'i');
3.cout << p; // info

1.char ch = 'i';
2.if(strchr("aeiou" , ch) != NULL)
3.cout << "DA"
4.else
5.cout << "NU";
6.//se va afisa DA

Eliminarea unui caracter dintr-un sir

Următoarea secvență elimină din șirul s (presupus citit) caracterul de


poziția x.

1.char s[256], t[256];


2.int x;
3.// ...
4.//eliminarea
5.strcpy(t , s + x + 1);
6.strcpy(s + x , t);

Inserarea unui caracter într-un sir

Următoarea secvență inserează în șirul s (presupus citit) de


poziția x caracterul 'A'.

1.char s[256], t[256];


2.int x;
3.// ...
4.//inserarea
5.strcpy(t , s + x);
6.strcpy(s + x + 1 , t);
7.s[x] = 'A'; // echivalent, *(s+x) = 'A';

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