Sunteți pe pagina 1din 9

Laborator 13

Șiruri de caractere

Biblioteca <ctring>

Nume Antet Sintaxă Semnificaţie

strlen <cstring> size_t strlen (char*); Returnează lungimea efectivă a unui şir (în
calculul lungimii nu intră caracterul NULL).
- size_t este un tip intreg definit
in string.h
- argumentul este de tip char*
(adica un vector de vector)
strcpy <cstring> char* strcpy(char* dest, char* Copiază de la adresa sursă la adresa
sursa); destinaţie.
strcat <cstring> char* strcat(char* dest, char* Are rolul de a adăuga şirul de la adresa
sursa); sursă la adresa dest – şirul de la sursa
rămâne nemodificat

strncat <cstring> char* strncat(char* dest, char* Are acelaşi rol ca strcat cu deosebirea că
sursa, size_t nr); adaugă şirului destinaţie primii nr octeţi ai
şirului sursă; adăugarea caracterelor se
face înaintea caracterului nul. Funcţia
returnează adresa de început a şirului
destinaţie.
strchr <cstring> char* strchr(char *s, int c); Are rolul de a căuta caracterul c în s.
Căutarea se face de la stânga la dreapta; în
cazul în care s-a găsit funcţia întoarce
adresa subşirului care începe cu prima
apariţie a caracterul citit şi se termină cu
caracterul nul al şirului în care se face
căutarea

strrchr <cstring> char* strrchr(char *s, int c); Are acelaşi rol ca şi strchr, deosebirea fiind
dată de faptul că returnează adresa ultimei
apariţii a caracterului
strcmp <cstring> int strcmp(char* s1, char* s2); Are rolul de a compara stil dicţionar, adică
element cu element, pornind din stânga a
şirurilor s1 şi s2. Valoarea reţinută va fi:

- < 0, dc. s1<s2;


- = 0, dc. s1=s2;
- >0, dc. s1>s2.
strstr <cstring> char* strstr(char *s1, char *s2); Are rolul de a identifica de a indentifica
dacă şirul s2 este subşir (caractere
succesive) al lui s1. Dacă acesta este
identificat, funcţia returnează adresa de
început în cadrul şirului s1, altfel
returnează 0.

stricm <cstring> int stricmp(char *s1, char *s2); Are acelaşi rol ca şi strcmp, diferenţa fiind
p ca nu face distincţie între literele mari şi
cele mici
strtok <cstring> char* strtok(char *s1, char *s2); Separă şirul s1 în entităţi prin separatorii
separatorii specificaţi în s2 – consultă Help-
ul

strcspn <cstring> size_t strcspn(char *s1, char *s2); Are rolul de a returna numărul de caractere
ale şirului s1 – caractere consecutive care
încep obligatoriu cu primul caracter – care
nu se găsesc în şirul s2.
strspn <cstring> size_t strspn(char *s1, char *s2); Are rolul de a returna numărul de caractere
ale şirului s1 – caractere consecutive care
încep obligatoriu cu primul caracter – care
se găsesc în şirul s2.

_strlwr <cstring> char* strlwr(char *s); Ea converteşte toate literele mari (‘A’…’Z’)
în litere mici (’a’…’z’). Restul caracterelor
rămân neschimbate. Funcţia întoarce
adresa s.
_strupr <cstring> char* strupr(char* s); Ea converteşte toate literele mici (‘a’…’z’)
în litere mari (’A’…’Z’). Restul caracterelor
rămân neschimbate. Funcţia întoarce
adresa s.

strpbrk <cstring> char* strpbrk(char* s1, char* s2); Caută primul caracter al şirului s1 în s2.
Dacă este găsit returnează adresa sa din
cadrul şirului s1 şi execuţia se termină,
altfel trece la pasul următor, s.a.m.d. Dacă
nici un caracter al şirului s1 nu aparţine lui
s2, funcţia întoarce adresa nulă.
atof <iostream> double atof(char *s); Funcţia coverteşte un şir către tipul către
tipul double. Dacă conversia eşuază (se
întâlneşte un caracter nenumeric) valoarea
întoarsă este 0. Dacă primele caractere
sunt albe, acestea sunt ignorate.

_atold <iostream> long double _atold(const char *s); Converteşte un şir către tipul long double.
atoi <iostream> int atoi(const char *s); Converteşte un şir către tipul int

atol <iostream> long atol(cost char *s); Converteşte un şir către tipul int lung
itoa <iostream> char *itoa(int valoare, char *sir, Funcţia itoa are rolul de a converti o
int baza); valoare de tip int in sir, care este memorat
 
in variabila sir. Valoarea baza retine baza
Analog: de numeraţie către care să se facă
conversia (de obicei baza este 10). În cazul
ltoa
bazei 10, şirul obţinut reţine şi semnul -.
ultoa Funcţia întoarce adresa şirului obţinut.

//Exercitiu 1. Declararea unui sir de caractere

//tehnica C

#include<cstring>
#include<iostream>
using namespace std;

void main()
{
//declarare
char a[50];
//atribuire ulterioara declararii
//a="Mesaj - "; - linie imposibila, pentru ca se incearca transmiterea unei
constante intr-o variabila
//declarare cu initializare
char b[7]="Salut "; //trebuie rezervate minimum 7 caractere, al 7-lea fiind
pentru caracterul '\0'
char c[]="limbajul "; //nu se specifica dimensiunea la declarare
char d[]={'C','/','C','+','+'};
//afisarea
cout<<b<<c;
for(int i=0;i<sizeof(d);i++)
cout<<d[i];
cout<<'\n';
system("pause");
}

//tehnica C++

#include<string>
#include<iostream>
using namespace std;

void main()
{
//declarare
string a;
//atribuire dupa declarare
a="Mesaj - ";
//declarare cu initializare
string b="Salut ";
string c("limbajul ");
string d="C/C";
string e(2,'+');
//afisarea
cout<<a<<b<<c<<d<<e<<'\n';
system("pause");
}

//Exercitiu 2. Citirea unui sir de caractere

//prin tehnica C

#include<cstring>
#include<iostream>
using namespace std;

void main()
{
char a[255];
cout << "Introduceti un nume dorit: ";
cin.getline (a,255,'\n');
//sau: cin.get (a,255,'\n');
//sau: gets(a);
cout << "Salut, " << a << "!\n";
cout<<"Dimeniunea numelui: "<<strlen(a)<<'\n';
system("pause");
}

//prin tehnica C++

#include <iostream>
#include <string>
using namespace std;

void main()
{
string a;
cout << "Introduceti un nume dorit: ";
getline (cin,a);
cout << "Salut, " << a << "!\n";
cout<<"Dimeniunea numelui: "<<a.length()<<'\n';
system("pause");
}

//Exercitiu 3. Concatenarea sirurilor de caractere

//prin tehnica C

#define _CRT_SECURE_NO_WARNINGS

#include <cstring>
#include <cstdio>
#include <iostream>
using namespace std;

void main()
{
char a[40] = "Salut ";
char b[20];
cout<<"Introduceti un nume: ";
gets(b);
strcat(a, strcat(b,"!"));
strcat(a, "\nLa revedere!");
puts(a);
system("pause");
}

//prin tehnica C++

#include <iostream>
#include <string>
using namespace std;

void main ()
{
string a;
cout << "Introduceti un nume dorit: ";
getline (cin,a);
string b("Salut, ");
string c="!\n";
string d=b+a+c;
cout << d;
system("pause");
}

//Exercitiu 4. Compararea a doua siruri

//prin tehnica C

#include <cstring>
#include <iostream>
using namespace std;

void main()
{
char a[50], b[50];
cout<<"Introduceti primul nume: ";
cin.getline(a,50,'\n');
cout<<"Introduceti al doilea nume: ";
cin.getline(b,50,'\n');
if(strcmp(a,b) < 0)
cout<<a<<" este alfabetic primul\n";
else
if(strcmp(a,b)==0)
cout<<"Numele sunt identice\n";
else
cout<<b<<" este alfabetic primul\n";
system("pause");
}
//prin tehnica C++

#include <string>
#include <iostream>
using namespace std;

void main()
{
string a,b;
cout<<"Introduceti primul nume: ";
getline(cin,a);
cout<<"Introduceti al doilea nume: ";
getline(cin,b);
if(a<b)
cout<<a<<" este alfabetic primul\n";
else
if(a==b)
cout<<"Numele sunt identice\n";
else
cout<<b<<" este alfabetic primul\n";
system("pause");
}

//Exercitiu 5.
/*
Se va scrie o functie ce va numara caracterele vocale dintr-un mesaj transmis de la
tastatura.
*/

#define _CRT_SECURE_NO_WARNINGS
#include<cstring>
#include<iostream>
using namespace std;

int nr_vocale(char s[])


{
int x=0; char c;
for(int i=0;i<strlen(s);i++)
switch(s[i])
{
case 'a':
case 'A':
case 'e':
case 'E':
case 'i':
case 'I':
case 'o':
case 'O':
case 'u':
case 'U': x++;
};
return x;
}
void main()
{
char a[265];
cout<<"Introduceti textul dorit: ";
gets(a);
cout<<"Numarul de vocale este: "<<nr_vocale(a)<<'\n';
system("pause");
}

//Exercitiu 6.
/*
Se consideră un text cu cel mult 255 de caractere, impartit in cuvinte, în care cuvintele
sunt separate prin caracterele spatiu, virgula, punct si virgula, punct.
Scrieţi un program C/C++ care citeşte de la tastatură un text de tipul menţionat mai sus
şi afișează pe ecran, pe câte un rând, cuvintele care cuprind cel puțin o notă muzicală.
Notele muzicale sunt DO, RE, MI, FA, SOL, LA, SI.
*/

#define _CRT_SECURE_NO_WARNINGS
#include<cstring>
#include<iostream>
using namespace std;

void main()
{
char s[255],separator[]=" ,.;",*p;
cout<<"Introduceti un text dorit: ";
cin.getline(s,255,'\n');
p=strtok(s,separator); //impartim textul in cuvinte dupa separator
int i=0;
while(p)
{
if(strstr(_strupr(p),"DO")!=0 || strstr(_strupr(p),"RE")!=0 ||
strstr(_strupr(p),"MI")!=0 || strstr(_strupr(p),"FA")!=0 || strstr(_strupr(p),"SOL")!=0
|| strstr(_strupr(p),"LA")!=0 || strstr(_strupr(p),"SI")!=0)
{
cout<<p<<'\n';
i=1;
}
p=strtok(NULL,separator);
}
if(!i)
cout<<"Nu exista cuvinte in mesaj ce contin note muzicale\n";
system("pause");
}

//Exercitiu 7.
/*
Se citeste un text alcatuit din mai multe cuvinte. Se cere sa se calculeze suma valorilor
exclusiv numerice intregi intalnite in text.
*/

#define _CRT_SECURE_NO_WARNINGS
#include<cstring>
#include<iostream>
using namespace std;
void main()
{
char s[100],separator[]=" ,.;!?",*p,cifre[]="0123456789-";
int suma=0;
cout<<"Introduceti un text dorit: ";
cin.getline(s,100,'\n');
p=strtok(s,separator); //impartim textul in cuvinte dupa separator
while(p)
{
if(strspn(p,cifre)==strlen(p))
if(strchr(p,'-')!=0 && p[0]!='-')
suma=suma;
else
suma+=atoi(p);
p=strtok(NULL,separator);
}
cout<<"Suma elementelor exclusiv numerice intregi pozitive: "<<suma<<'\n';
system("pause");
}

//Exercitiu 8.
/*
Se citeste un mesaj, pana la intalnirea caracterului 'Enter'. Se cere afisarea acestuia
in sens invers.
*/

//Prin tehnica C

#define _CRT_SECURE_NO_WARNINGS
#include<cstring>
#include<iostream>
using namespace std;

void main()
{
char s[255];
cout<<"Introduceti mesajul dorit: ";
cin.getline(s,255,'\n');
cout<<"Mesajul inversat este:\n";
for(int i=strlen(s)-1;i>=0;i--)
cout<<s[i];
cout<<'\n';
system("pause");
}

//Prin tehnica C++

#include<string>
#include<iostream>
using namespace std;

void main()
{
string s;
cout<<"Introduceti mesajul dorit: ";
getline(cin,s);
cout<<"Mesajul inversat este:\n";
reverse(s.begin(),s.end());
cout<<s<<'\n';
system("pause");
}

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