Sunteți pe pagina 1din 13

SIRURI DE CARACTERE

A. DEFINITIE
Un şir de caractere:
- este un tablou unidimensional (vector) de caractere;
- reprezintă o succesiune de caractere cuprinsă între ghilimele şi terminata cu caracterul NULL notat ‘\0’;
- conţine orice tip de caracter: literă mică, literă mare, cifră, caracter special, delimitator, fiecare caracter
fiind reprezentat prin codul său ASCII.
Un şir de caractere este o structură de date, formată dintr-o mulţime ordonată de caractere, în care fiecare
caracter se identifică prin poziţia sa în cadrul mulţimii.

Exemplu
Şirul de caractere “Limbajul C++” se poate reprezenta astfel:
L i m b a j u l C + + \0
0 1 2 3 4 5 6 7 8 9 10 11 12

Fiecare caracter din setul de caractere al limbajului C++ se caracterizează printr-un cod unic, numit codul
ASCII al caracterului, un număr întreg între 0 şi 255. În cadrul setului ASCII, codurile caracterelor sunt după
cum urmează:
- literele mari începând cu 65 (A - 65, B - 66, ..., Z - 90);
- literele mici începând cu 97 (a – 97, b – 98, ..., z - 122);
- cifrele începând cu 48 (0 – 48, 1 – 49, ..., 9 - 57).

Observaţie:
Diferenţa între codul ASCII al oricărei litere mici şi codul ASCII al literei mari pereche este aceeaşi, 32.

Exemplu
char c1,c2;
int x;
c1='A'; x=c1+32; //conversie implicită
c2=x;
cout<<c1<<endl<<c2<<endl<<x;

B. DECLARAREA SIRURILOR DE CARACTERE


- vectorul de caractere trebuie declarat cu un caracter mai mult (caracterul NULL) decât cel mai mare şir pe
care îl poate conţine;
- un şir de caractere poate fi definit ca un vector de caractere, în două moduri:
 char nume[dimensiune]; // se declară un vector cu elemente de tip caracter;
sau
 char *nume; // se declară un pointer către tipul caracter;

unde nume este identificatorul variabilei de tip şir de caractere, iar dimensiune reprezintă numărul maxim de
caractere ce pot fi memorate în şir (inclusiv caracterul NULL);
Observaţie: caracterele şirului vor ocupa poziţii consecutive în vector, începând cu poziţia 0
Exemplu 1
 char sir[20];
- se declară un şir de caractere în care vor putea fi memorate maxim 19 caractere;
- dacă variabila sir reţine şirul ”informatica”, reprezentarea în memoria internă este următoarea:

i n f o r m a t i c a \0
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
unde: sir[0]=’i’, sir[1]=’n’, sir[2]=’f’, …………… ,sir[10]=’a’
- caracterul NULL (’\0’) este adăugat automat de către compilator;
- lungimea şirului de caractere este dată de numărul de caractere (în exemplu este de 11);
Exemplu 2
 char s[5];
- se declară un şir de caractere s în care vor putea fi memorate maxim 4 caractere;
- dacă variabila s reţine şirul ”algoritm”, reprezentarea în memoria
a l g o \0
0 1 2 3 4

Exemplu 3
 char a[15]=“calculator”;
- se declară un şir de caractere a în care vor putea fi memorate maxim 14 caractere;
- şirul de caractere a a fost iniţializat la declararea lui,
Dacă se iniţializează şirul de caractere, nu mai este nevoie să se precizeze lungimea maximă a şirului, aceasta
fiind calculată de către compilator:
char a[]=“calculator”;

Exemplu 4
char s[]={'a','e','i','o','u'};
s[5]=NULL;
- se declară un şir de caractere care memorează vocalele litere mici;
- şirul de caractere a a fost iniţializat la declararea lui,
- utilizatorul trebuie să plaseze la sfârşitul şirului indicatorul de sfârşit de şir;

TIPUL CHAR*

Tipul de dată char* poartă numele de pointer la caracter. O variabilă de tip pointer la character este
capabilă să reţină adresa de memorie a unui caracter.

Numele unei variabile de tip şir de caractere (sau vector în general), reprezintă adresa de memorie a primului
octet al şirului (vectorului). Datorită acestui fapt, elementele unui şir de caractere pot fi accesate prin
intermediul adreselor lor, astfel:
Presupunem că am declarat şi iniţializat o variabilă de tip şir de caractere:
char sir[]=”programator”;
cout<<sir;
Se va afişa sirul: programator.

Prin urmare am adresat şirul de la primul octet.


Dacă scriem sir+1, vom adresa şirul de la al doilea octet . Instructiunea
cout<<sir+1; //va afişa rogramator deoarece la adresa şirului am adunat 1 şi am obţinut adresa următorului
octet, adica octelul al doilea din şir.
Ce va afisa instructiunea : cout<<sir+2; ?
Se va afişa :ogramator şi aşa mai departe, întrucât la adresa şirului am adunat 2 şi am obţinut adresa celui
de-al treilea octet din şir. Expresiile de forma: sir, sir+1, sir+2… sunt de tip char*, adrese de memorie ale unor
elemente de tip caracter.

Legătura dintre pointeri și tablouri


Fie declaratia: char * p , s[31] = "pbinfo";
cout<<s;//pbinfo
cout<<s+1;//binfo
cout<<s+2;//info
cout<<s[2];
Ce este p? Este un pointer la char, adică o variabilă a cărei valoare este adresa unei date de tip char. A cărei
date? În acest moment a niciuneia, deoarece variabila p nu a fost inițializată, iar valoare ei este o adresă
aleatorie.
Ce este s? Spunem că este un șir de caractere, dar practic s este tot un pointer. Valoarea sa este adresa
primului element din șir, adică adresa lui s[0].
Observăm că de fapt, variabilele p și s sunt de același tip, pointer la char. Diferența dintre cele două variabile
este că s memorează o adresa de memorie unde începe un șir de caractere (la acea adresă există o dată de
tip char ) în timp ce p memorează o adresă aleatorie.
Cu ce putem inițializa pointer-ul p? Cu adresa unei date de tip char. O asemenea dată este un orice element
al unui șir de caractere, de exemplu orice element din s. Dacă p reprezinta adresa unui caracter dintr-un șir,
atunci cu p se pot face toate operațiile care se pot face cu acel șir.

Exemplu 5:
#include <iostream>
#include <fstream>
int main() {char sir[15],*p; //p-pointer la o variabila de tip caracter
ofstream f("sir.out");
cout<<"introduceti sir:"; cin>>sir;
f<<"sir:"<<sir<<endl; //sir:abcdefghijk
f<<"sir+1:"<<sir+1<<endl; // sir+1:bcdefghijk
f<<"sir+2:"<<sir+2<<endl; // sir+2:cdefghijk
f<<"sir+3:"<<sir+3<<endl; // sir+3:defghijk
f<<"(sir)[0]:"<<sir[0]<<endl; //(sir)[0]:a
f<<"(sir+1)[0]:"<<(sir+1)[0]<<endl; //(sir+1)[0]:b
f<<"(sir+1)[1]:"<<(sir+1)[1]<<endl; //(sir+1)[1]:c
f<<"(sir+1)[2]:"<<(sir+1)[2]<<endl; (sir+1)[2]:d
f<<"(sir+2)[0]:"<<(sir+2)[0]<<endl; // (sir+2)[0]:c
f<<"(sir+2)[1]:"<<(sir+2)[1]<<endl; (sir+2)[1]:d
p=sir+3; //se depune adresa celui de al patrulea element in pointerul p (sir+3)
f<<"sir+3="<<p<<endl; // sir+3=defghijk
p++;
f<<"sir+3="<<p<<endl; // sir+3=efghijk
f.close(); }

Introducând şirul abcdefgijk, în exemplul de mai sus, în fişierul sir.out se va afişa:


sir:abcdefghijk
sir+1:bcdefghijk
sir+2:cdefghijk
sir+3:defghijk
(sir)[0]:a
(sir+1)[0]:b
(sir+1)[1]:c
(sir+1)[2]:d
(sir+2)[0]:c
(sir+2)[1]:d
sir+3=defghijk
sir+3=efghijk

C. Citirea şi scrierea şirurilor de caractere

Citirea şirurilor de caractere


Citirea se face folosind instrucţiunea cin în două moduri:
- la nivel de caracter;
- la nivelul şirului de caractere
a. Citirea la nivel de caracter (caracter cu caracter)
cout<<“numarul de caractere:”;cin>>>n;
for(i=0;i<n;i++)
cin>>sir[i];
sir[n]=NULL;
- dacă citirea şirului de caractere se face caracter cu caracter trebuie adăugat caracterul NULL la sfârşitul
şirului de caractere.

b. Citirea la nivelul şirului de caractere


cin>>sir;
- în acest caz caracterul NULL este adăugat automat de către compilator;
- operaţia de citire de la tastatură se termină atunci când a fost introdus un caracter alb (spaţiu sau Enter);

Pentru a citi caracterul spaţiu se foloseşte funcţia get care are două forme.
Forma 1
 cin.get(sir,nr,ch);
 cin.getline(sir,nr,ch);
cin.get(sir,nr,ch);
unde:
• sir este o variabilă de tip şir de caractere care se va citi;
• nr este o variabilă de tip întreg şi reprezintă numărul maxim de caractere care vor fi citite, inclusiv
caracterul NULL;
• ch este o variabilă de tip caracter care reprezintă caracterul care încheie citirea şirului;
- dacă al treilea parametru lipseşte, se consideră implicit caracterul ‘\n ’ generat de tasta Enter;
-funcţia get nu preia ultimul caracter citit;
- diferenţa dintre funcţiile get şi getline este aceea că functia getline preia din fluxul de date de intrare şi
delimitatorul de sfârşit de şir, în timp ce funcţia get nu preia ultimul caracter citit;
Forma 2
cin.get();

- folosită după o fucţie cin.get() cu parametri pentru a descărca din fluxul de date ultimul caracter citit, care
ar împiedica efectuarea unei a doua operaţii de citire de la tastatură (atunci cand citim succesiv mai multe
siruri de caractere).

Exemplu 1
char s1[10];
cin>>s1; //dacă introducem textul “informatica” şi tastăm Enter se memorează în variabila s1 şirul informati;

Exemplu 2
char s2[10];
cin>>s2; //dacă introducem textul “informat” şi tastăm Enter se memorează în variabila s2 şirul informat;

Exemplu 3
char s3[10];
cin>>s3; //dacă introducem textul “info arena” şi tastăm Enter se memorează în variabila s3 şirul info;

Exemplu 4
char s4[10];
cin.get(s4,5); //dacă introducem textul informatica şi tastăm Enter se memorează în variabila s5 şirul info;

Exemplu 5
char s5[10];
cin.get(s5,10); //dacă introducem textul info arena şi tastăm Enter se memorează în variabila s6 şirul info
aren;

Exemplu 6
char s6[10];
cin.get(s6,10, '$'); //dacă introducem textul informat$ şi tastăm Enter se memorează în variabila s7 şirul
informat; 

Exemplu 7
char s7[10];
cin.get(s7,10); //dacă introducem textul info$arena şi tastăm Enter se memorează în variabila s8 şirul
info$aren; 

Exemplu 8
char s8[10];
cin.get(s8,9,‟\n‟); //dacă introducem textul “info arena$” şi tastăm Enter se memorează în variabila s8 şirul
info are;

Exemplu 9
char a[10], b[10];
cin.get(a,10); cin.get(b,10); //dacă introducem textul : info şi tastăm Enter se memorează în variabila a şirul
info şi nu va putea fi citit al doilea şir; 

Exemplu 10
char a[10], b[10];
cin.get(a,10); cin.get(); cin.get(b,10); //dacă introducem textul info şi tastăm Enter şi apoi introducem şirul
arena şi tastăm Enter se memorează în variabila a şirul info şi în variabila b şirul arena;

Exemplu 11
char a[10], b[10];
cin.getline(a,10);
cin.getline(b,10); //dacă introducem textul “info arena” şi tastăm Enter, iar apoi introducem textul
“algoritmi”şi tastăm Enter, se memorează în variabila a şirul info aren şi în variabila b şirul algoritmi;

Scrierea şirurilor de caractere

Scrierea se face folosind instrucţiunea cout în două moduri:


- la nivel de caracter;
- la nivelul şirului de caractere.
a. Scrierea la nivel de caracter (caracter cu caracter)
cin>>sir;
i=0;
while(sir[i]!=NULL)
{cout<<sir[i];
i++;}
b. Scrierea la nivelul şirului de caractere
cout<<sir;

Exemplu 1
char s1[10];
cin>>s1;
cout<<s1;//dacă introducem textul “informat” şi tastăm Enter se afişează şirul informat;

Exemplu 2
char s2[10];
cin>>s2;
cout<<s2+2;//dacă introducem textul “informat“şi tastăm Enter se afişează “format”;

Exemplu 3
char s3[10];
cin>>s3;
cout<<s3;
//dacă introducem textul “info arena” şi tastăm Enter se afişează şirul info;

D. Prelucrarea şirurilor de caractere


Pentru a lucra cu siruri de caractere folosim biblioteca string.h sau cstring.
Funcţii care lucrează cu şiruri de caractere
1. STRLEN 10.STRNSET
2. STRCPY 11.STRLWR
3. STRNCPY 12.STRUPR
4. STRCAT 13.TOUPPER
5. STRNCAT 14.TOLOWER
6. STRCMP 15.STRCHR
7. STRNCMP 16.STRRCHR
8. STRICMP 17.STRSTR
9. STRSET 18.STRREV

1. Funcţia STRLEN
Efect: returnează lungimea şirului de caractere.
Sintaxa: strlen(sir) ;
unde sir este o variabilă de tip şir de caractere

Exemplu
char s[21];
int n;
cin>>s;
n=strlen(s);
cout<<n;
cout<<endl<<strlen(s+2);
Dacă se citeşte în variabila s şirul “informatica” se afişează valorile 11 si 9.

Exerciţiu
Care este efectul apelului:
cout<<strlen("programare"); ?

2. Funcţia STRCPY
Efect: copiaza un şir de caractere în alt şir de caractere, inclusive caracterul NULL.
Sintaxa:
strcpy(sir1,sir2);
unde sir1 şi sir2 sunt două variabile de tip şir de caractere; se copiaza continutul sirului sir2 in sir1

Exemplu
char a[21],b[21];
cin>>a;
strcpy(b,a);
cout<<b;
Dacă se citeşte în variabila a şirul” informatica” se afişează şirul informatica.

Exemplu
char s[21], t[21] = "copil";
strcpy(s , "pbinfo");
cout << s; // pbinfo
strcpy(s , t); cout << s; // copil
strcpy(s , t + 2); cout << s; // pil
strcpy(s + 2 , t);
cout << s; // picopil

Exerciţiu
char a[]=”info”;
Care este efectul apelului: strcpy(a,a+2); ? infofo
Care este efectul apelului: strcpy(a+1,a+2); ? infoifo

3. Funcţia STRNCPY
Efect: copiaza un număr de caractere specificat, dintr-un şir de caractere în alt şir de caractere.
Sintaxa:
strncpy(sir1,sir2,nr);
unde sir1 şi sir2 sunt două variabile de tip şir de caractere, iar nr este o variabilă de tip întreg; se copiaza nr
caractere din sirul sir2 in sirul sir1

Observaţie:
Dacă strlen(sir2)<nr, atunci sir1 se completează automat cu caracterul NULL; în caz contrar sir1 nu se va
termina cu caracterul NULL, acesta trebuind să fie adăugat de către utilizator.

Exemplu
char a[21],b[21];
cin>>a;
strncpy(b,a,4);
b[4]=NULL;
cout<<b;
Dacă se citeşte în variabila a şirul informatica se afişează şirul info.

Exerciţiu
Care este efectul apelului:
strncpy(b,a+7,3); ? btic

4. Funcţia STRCAT
Efect: concatenează două şiruri de caractere.
Sintaxa:
strcat(sir1,sir2);
unde sir1 şi sir2 sunt două variabile de tip şir de caractere; se lipeste sir2 de sir1

Exemplu

char a[21],b[21];
cin.get(a,20); cin.get (); cin.get(b,20);
strcat(a,b);
cout<<a;
Dacă se citeşte în variabila a şirul “info” şi în variabila b şirul “arena” seafişează şirul infoarena.

Exemplu
char s[21]="pbinfo", t[21] = "copil";
strcat(s , t); cout << s; // pbinfocopil
strcat(s , t + 2); cout << s; //pbinfocopilpil

Exerciţiu
Care este efectul apelurilor:
strcat(a," ");
strcat(a,b); ?
5. Funcţia STRNCAT
Efect: concatenează la un șir de caractere un număr de caractere specificat din alt șir de caractere.
Sintaxa:
strncat(sir1,sir2,nr);
unde sir1 şi sir2 sunt două variabile de tip şir de caractere, iar nr este o variabilă de tip întreg; se lipesc nr
caractere din sirul sir2, in sirul sir1

Exemplu
char a[21],b[21];
cin.get(a,20); cin.get (); cin.get(b,20);
strncat(a,b,3);
cout<<a;//”infoare”
Dacă se citeşte în variabila a şirul “info” şi în variabila b şirul “arena” se afişează şirul infoare.

Exerciţiu
Care este efectul apelului:
Cout<<strncat(a,b+3,2); ?//”infona”

6. Funcţia STRCMP
Efect: compară două şiruri de caractere.
Sintaxa:
strcmp(sir1,sir2)
unde sir1 şi sir2 sunt două variabile de tip şir de caractere.
o valoare negativa -1, dacă sir1<sir2, dpdv lexicografic

strcmp(sir1,sir2)= zero, dacă sir1=sir2

o valoare pozitivă +1, dacă sir1>sir2

“maree” <“maria”

Exemplu
char a[21],b[21];
cin.get(a,20); cin.get (); cin.get(b,20);
cout<<strcmp(a,b);
Dacă se citeşte în variabila a şirul “info” şi în variabila b şirul “intro” se afişează valoarea -1.

Exerciţiu
Care este efectul apelului:
cout<<strcmp("intro",a);?//1

7. Funcţia STRNCMP
Efect: compară un număr de caractere specificat din două şiruri de caractere.
Sintaxa:
strncmp(sir1,sir2,nr)
unde sir1 şi sir2 sunt două variabile de tip şir de caractere, iar nr este o variabilă de tip întreg.

Exemplu
char a[21],b[21];
cin.get(a,20); cin.get (); cin.get(b,20);
cout<<strncmp(a,b,3);
Dacă se citeşte în variabila a şirul “info” şi în variabila b şirul “intro” se afişează valoarea -1.

Exerciţiu
Care este efectul apelului: cout<<strncmp(a,"intro",2);?

8. Funcţia STRICMP
Efect: compară două şiruri de caractere fără a face diferenţa între litere mici şi litere mari.
Sintaxa:
stricmp(sir1,sir2)
unde sir1 şi sir2 sunt două variabile de tip şir de caractere.

Exemplu
char a[21],b[21];
cin.get(a,20); cin.get (); cin.get(b,20);
cout<<stricmp(a,b);
Dacă se citeşte în variabila a şirul “arena” şi în variabila b şirul ARE se afişează valoarea 1.

Exerciţiu
Care este efectul apelului:
cout<<stricmp("Are","are");?

9. Funcţia STRSET
Efect: iniţializează un şir de caractere cu acelaşi caracter.
Sintaxa:
strset(sir,ch);
unde sir este o variabilă de tip şir de caractere, iar ch este o variabilă de tip caracter.

Exemplu
char a[21],x;
cin.get(a,20); cin>>x;
strset(a,x);
cout<<a;
Dacă se citeşte în variabila a şirul info şi în variabila x caracterul 1 se afişează şirul 1111.

Exerciţiu
Care este efectul apelului:
cout<<strset(“#*#*”,'#'); ?

10. Funcţia STRNSET


Efect: iniţializează într-un şir de caractere, primele nr caractere, cu caracterul ch.
Sintaxa:
strnset(sir,ch,nr);
unde sir este o variabilă de tip şir de caractere, ch este o variabilă de
tip caracter, iar nr este o variabilă de tip întreg.

Exemplu
char a[21],x;
int n=2;
cin>>a>>x;
strnset(a,x,n);
cout<<a;
Dacă se citeşte în variabila a şirul info şi în variabila x caracterul 1 se
afişează şirul 11fo.

Exerciţiu
Care este efectul apelului:
strnset(a,'&',1); ? info&nfo
11. Funcţia STRLWR
Efect: transformă literele mari ale sirului sir în litere mici.
Sintaxa:
strlwr(sir);
unde sir este o variabilă de tip şir de caractere.

Exemplu
char a[21];
cin>>a;
strlwr(a);
cout<<a;
Dacă se citeşte în variabila a şirul iNFo se afişează şirul info.

Exerciţiu
Care este efectul apelului:
cout<<strlwr("Arena"); ?//arena

12. Funcţia STRUPR


Efect: transformă literele mici în litere mari.
Sintaxa:
strupr(sir)
unde sir este o variabilă de tip şir de caractere.

Exemplu
char a[21];
cin>>a;
strupr(a);
cout<<a;
Dacă se citeşte în variabila a şirul info se afişează şirul INFO.

Exerciţiu
Care este efectul apelului:
strupr("ARENa"); ?//ARENA

13. Funcţia TOLOWER


Efect: transformă o literă mare în literă mică.
Sintaxa:
tolower(ch);
unde ch este o variabilă de tip caracter.

Exemplu
char c;
cin>>c;
c=tolower(c);
cout<<c;
Dacă se citeşte în variabila c caracterul N se afişează caracterul n.

Exerciţiu
Care este efectul apelului:
c=tolower('A');
cout<<c; ?//a

14. Funcţia TOUPPER


Efect: transformă o literă mică în literă mare.
Sintaxa:
toupper(ch);
unde ch este o variabilă de tip caracter.

Exemplu
char c;
cin>>c;
c=toupper(c);
cout<<c;
Dacă se citeşte în variabila c caracterul b se afişează caracterul B.

Exerciţiu
Care este efectul apelului:
c=toupper('h');
cout<<c; ?//H

Pentru functiile tolower si toupper se includ biblioteca cctype

15. Funcţia STRCHR


Efect: caută prima apariţie a ununi caracter într-un şir de caractere.
Sintaxa:
strchr(sir,ch);
unde sir este o variabilă de tip sir de caractere, iar ch este o variabilă
de tip caracter.

Exemplu
char a[21],c;
cin.get(a,20); cin>>c;
cout<<strchr(a,c);
Dacă se citeşte în variabila a şirul info şi în variabila c caracterul f se afişează şirul fo.

Exerciţiu
Care este efectul apelului:
cout<<strchr("arena",'e'); ?//ena

16. Funcţia STRRCHR


Efect: caută ultima apariţie a ununi caracter într-un şir de caractere.
Sintaxa:
strrchr(sir,ch);
unde sir este o variabilă de tip sir de caractere, iar ch este o variabilă
de tip caracter.

Exemplu
char a[21],c;
cin>>a>>c;
cout<<strrchr(a,c);
Dacă se citeşte în variabila a şirul “informatica” şi în variabila c caracterul ‘i’ se afişează şirul ica.

Exerciţiu
Care este efectul apelului:
cout<<strrchr("info",'f'); ?//fo

17. Funcţia STRSTR


Efect: caută un subşir de caractere într-un şir de caractere.
Sintaxa:
strstr(sir1,sir2)
unde sir1 şi sir2 sunt două variabile de tip şir de caractere.

Exemplu
char a[21],b[21];
cin.get(a,20); cin.get (); cin.get(b,20);
cout<<strstr(a,b);
Dacă se citeşte în variabila a şirul “informatica” şi în variabila b şirul “tic” se afişează şirul tica.

Exerciţiu
Care este efectul apelului:
cout<<strstr("arena","en"); ?//ena

18. Funcţia STRREV


Efect: inversează ordinea caracterelor într-un şir de caractere.
Sintaxa:
strrev(sir)
unde sir este o variabillă de tip şir de caractere.

Exemplu
char a[21];
cin>>a;
strrev(a);
cout<<a;
Dacă se citeşte în variabila a şirul info se afişează şirul ofni.

Exerciţiu
Care este efectul apelului:
cout<<strrev("12345"); ?

E. SEPARAREA ENTITĂŢILOR

strtok(char *s, char *sep);

Funcția strtok extrage dintr-un sir de caractere s câte un subșir (cuvânt) delimitat de caractere din șirul sep.
Funcția se apelează în două moduri:

 primul apel are ca parametri șirul din care se face extragerea și șirul separatorilor
 la următoarele apeluri primul parametru este NULL.
Rezultatul funcției strtok este adresa de început a subșirului curent extras, sau NULL dacă nu se mai poate
extrage niciun subșir din șirul dat.

Șirul din care se face extragerea se modifică în urma apelurilor. Dacă este nevoie de el mai târziu trebuie să-i
facem o copie.

Funcţia practic are rolul de a împarţi şirul s în subşiruri separate de orice caracter aflat în lista de delimitatori
sep, prin apelarea ei succesivă. Se va returna la fiecare apel un subsir, ignorând caracterele cu rol de
separator aflate în şirul de delimitatori. O dată terminat şirul, funcţia va returna NULL.
Exemplu:
Afisarea cuvintelor din sirul s pe randuri separate. Cate sunt?
#include <iostream>
#include<string.h>
using namespace std;
int main()
{char s[256], *p, separator[]=" ,.";
int k=0;
cin.get(s,255);
p=strtok(s,separator);
while (p)
{cout<<p<<endl;k++;
p=strtok(NULL, separator) ;}
cout<<”nr cuvinte gasite”<<k;
return 0;}
Alte funcții pentru caractere:
Următoarele funcții au ca parametri valori numerice, reprezentând codul ASCII al unor caractere. Prototipul
lor se află în header-ul cctype.
- isalnum
int isalnum( int ch );

Verifică dacă un caracter este alfanumeric (cifră, literă mare, literă mică). Returnează o valoare diferită de
zero dacă parametrul este alfanumeric, 0 în caz contrar.

- isalpha

int isalpha( int ch );

Verifică dacă un caracter este alfabetic (literă mare, literă mică). Returnează o valoare diferită de zero dacă
parametrul este alfabetic, 0 în caz contrar.

- islower

int islower( int ch );

Verifică dacă un caracter este literă mică. Returnează o valoare diferită de zero dacă parametrul este literă
mică, 0 în caz contrar.

- isupper

int isupper( int ch );

Verifică dacă un caracter este literă mare. Returnează o valoare diferită de zero dacă parametrul este literă
mare, 0 în caz contrar.

- isdigit

int isdigit( int ch );

Verifică dacă un caracter este cifră. Returnează o valoare diferită de zero dacă parametrul este cifră, 0 în caz
contrar.

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