MEMORATOR
Șiruri de
caractere
C++
CONSTANȚA
2020
2
3
CUPRINS
!! de editat !!
Determinarea lungimii unui șir de caractere
Separarea entităților
4
Ce este un caracter?
Un caracter reprezintă un simbol, de exemplu o literă sau un numă r.
O constantă caracter are ca valoare codul ASCII al simbolului pe care îl
prezintă .
ASCII este acronimul pentru American Standard Code for Information
Interchange (codul standard american pentru schimbul de informații).
Acesta reprezintă un sistem de codificare a simbolurilor care se bazează
pe alfabetul englez. Codurile ASCII reprezintă caractere text pentru
computere și echipamente care lucrează cu text.
int n;
char c;
cout<<"caracterul: ";cin>>c;
n=c; //copiem codul ASCII al caracterului c în
variabila întreagă n
cout<<"codul: "<<n;
5
Tipul char
1. char cuv[dimensiune];
2. char cuv[17]=”informatica”;
3. char cuv[]=”informatica”
În urma inițializă rii, la sfâ rșitul cuvâ ntului va fi adă ugat caracterul
0(codul ASCII al caracterului NULL).
Tipul char*
Tipul char* poartă numele de pointer la caracter. O variabilă de
acest tip este capabilă de a reține adresa de memorie a unui caracter.
#include <iostream>
cout<<"(sir)[0]: "<<(sir)[0]<<'\n';
cout<<"(sir+1)[0]: "<<(sir+1)[0]<<'\n';
cout<<"(sir+1)[1]: "<<(sir+1)[1]<<'\n';
cout<<"(sir+1)[2]: "<<(sir+1)[2]<<'\n';
cout<<"(sir+2)[0]: "<<(sir+2)[0]<<'\n';
cout<<"(sir+2)[1]: "<<(sir+2)[1]<<'\n';
cout<<'\n';
p=sir+3;
cout<<"sir+3="<<p<<'\n';
p++;
cout<<"sir+3="<<p<<'\n';
return 0;
}
9
return 0;
}
a) Varianta cu 3 parametri
cin.get(sir, dimens+1,’c’) sir – ș irul de caractere
dimens+1 – lungimea maximă a
ș irului de caractere, inclusiv
caracterul NULL
c – caracterul care determină
încheierea citirii ș irului
return 0;}
12
b) Varianta cu 2 parametri
cin.get(sir, dimens+1) sir – ș irul de caractere
dimens+1 – lungimea maximă a ș irului de
caractere, inclusiv caracterul NULL
int main()
{char c[101];
cout<<"Introduceti sirul de caractere: "<<endl;
cin.get(c,100);
cout<<"Sirul de caractere Varianta aceasta implică folosirea
introdus este: "<<c; caracterului ENTER drept caracter
return 0; terminal al șirului.
}
Toate observațiile de mai sus sunt
valabile.
int main()
{char sir[50];
cin>>sir;
cout<<strlen(sir); // afiseaza lungimea sirului
return 0;
}
return 0;
}
14
a) strcat
strcat(dest, sursa) dest și sursa – de tip
char/string
int main() Funcția strcat adaugă la sfâ rșitul
{ șirului dest o copie a șirului
char s1[50],s2[50]; sursa.
cout<<"introduceti s1: ";
cin>>s1;
cout<<"introduceti s2: ";
cin>>s2;
strcat(s1,s2); //concateneaza s2 la s1
cout<<s1;
return 0; Obs! Lungimea lui s1 devine
} strlen(s1)+strlen(s2).
b) strncat
strcpy(dest, sursa,nr) dest ș i sursa – de tip char/string;
nr – de tip int/long
int main()
{char s2[20],s1[20];
int n;
cin>>s1; cin>>n;
strcpy(s2,s1,n); //concateneaza primele n caractere
din s1 la s2
cout<<s2;
Funcția strncat adaugă la sfâ rșitul
return 0;
șirului dest cel mult nr elemente
}
din șirul sursa.
c) strstr
strstr(sir, secv) sir ș i secv – de tip char/string
int main()
{ char s1[20],s2[20],*p;
cout<<"introduceti primul sir: "; cin>>s1;
cout<<"introduceti al doile sir: "; cin>>s2;
p=strstr(s1,s2);
if(p)
cout<<s2<<" se gaseste pe pozitia "<<p<<" in
sir";
else
cout<<s2<<" nu se gasteste in s1";
return 0;}
Funcția strstr returnează prima
apariție, de la dreapta la stâ nga, a
secvenței secv în șirul sir.
16
a) strcmp
strcpy(sir1, sir2) sir1 și sir2 – de tip
char/string
int main() Funcția strcpy compară șirul sir1 cu șirul
{char s1[10],s2[10];
int c;
sir2 începâ nd de la primul caracter al
cin>>s1; fiecă rui șir, pâ nă câ nd este gă sit un caracter
cin>>s2; diferit sau pâ nă câ nd unul dintre șiruri se
c=strcmp(s1,s2); termină .
if(c<0)
cout<<s1<<" < "<<s2;
else if(c>0)
Obs! Funcția compară codurile
cout<<s1<<" > "<<s2;
else ASCII ale caracterelor. Un
cout<<s1<<" = "<<s2; caracter este mai mic decâ t
altul dacă are codul ASCII
return 0;
} mai mic.
Valoarea returnată :
<0, dacă s1<s2
>0, dacă s1>s2
=0,dacă s1=s2
b) strncmp
return 0;
}
return 0;}
return 0;}
18
Separarea entităților
strtok(sir,const) const si sir – de tip char/string
#include <iostream>
#include <cstring>
using namespace std;
char text[151],*p,separator[]=" .,;:";
int k=0;
int main()
{
cout<<"Introduceti textul: "<<endl;
cin.get(text,150);
return 0;
}
19
int main()
{
char a[50],b[50];
cout<<"cuvantul este: ";
cin>>a;
int i,j=0;
for(i=strlen(a)-1; i>=0; i--)
{
b[j]=a[i];
j++;
}
b[j]=0; //adaug caracterul null la sfarsitul sirului
if(strcmp(a,b)==0)
cout<<"da";
else
cout<<"nu";
return 0;
}
20
char a[41],b[41];
int main()
{
cin.get(a,40,'\n');
cin.get();
cin.get(b,40,'\n');
if(strcmp(a,b)>0)
{
cout<<b<<'\n';
cout<<a;
}
else
{
cout<<a<<'\n';
cout<<b;
}
return 0;
}
21
char s1[131],s2[20],*p;
int l;
int main()
{
cout<<"Din textul: ";
cin.get(s1,130);
cin.get();
cout<<"eliminan: ";
cin>>s2;
l=strlen(s2); //lungimea lui s1
p=strstr(s1,s2); //cautam s1 in s2
while(p)
{
strcpy(p,p+l); //sterge sirul s2, copiind sirul de pe pozitia
p+l pe pozitia p
p=strstr(s1,s2); //cautam o noua aparitie a lui s2 in s1
}
cout<<s1;
return 0;
}
22
return 0;
}