Sunteți pe pagina 1din 5

PROBLEME REZOLVATE C++

Prima litera dintr-un cuvant | Siruri de caractere in C++

Incepem cu cea mai usoara problema: avem un sir de caractere „Ana se duce la piata”
iar noi trebuie sa identificam prima litera din fiecare cuvant. Pentru a rezolva aceasta
problema vom separa mai intai propozitia in cuvinte folosind functia strtok explicata in
tutorialul precedent.
Dupa ce am separat fiecare cuvant din propozitie utilizam cuvant[0] pentru a afisa
fiecare litera din primul cuvant.

#include <iostream>
using namespace std;
int main() {
char propozitie[128] = "Ana se duce la piata";
char *cuvant = strtok(propozitie, " ");
while(cuvant) {
cout << cuvant << " -> prima litera: " << cuvant[0] << "\n";
cuvant = strtok(NULL, " ");
}
return 0;
}
Ultima litera a unui cuvant | Siruri de caractere in C++
Urmatoarea problema este similara cu prima, doar ca de data aceasta trebuie sa afisam
ultima litera. Tot ceea ce trebuie sa facem este sa schimbam cuvant[0] cu
cuvant[strlen(cuvant) – 1] deoarece cu strlen(cuvant) obtinem lungimea totala a
sirului, iar mai apoi scadem -1 deoarece numerotarea incepe de la 0, iar pentru a
ajunge la ultima litera trebuie sa scadem 1.

#include <iostream>
using namespace std;
int main() {
char propozitie[128] = "Ana se duce la piata";
char *cuvant = strtok(propozitie, " ");
while(cuvant) {
cout << cuvant << " -> prima litera: " << cuvant[ strlen(cuvant) - 1 ] << "\n";
cuvant = strtok(NULL, " ");
}
return 0;
}

Numar de vocale dintr-un sir de caractere in C++

Vom presupune ca avem un text similar cu cel din problema precedenta: „Ana se duce
la piata” pentru a numara numarul de vocale din acest text, vom face o functie auxiliara
eVocala care va returna true / false in functie de caracterul trimis prin parametru.

1
#include <iostream>
#include <cstring>
using namespace std;
bool eVocala(char c) {
if(c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u')
return true;
if(c == 'A' || c == 'E' || c == 'I' || c == 'O' || c == 'U')
return true;
return false;
}
int main() {
char propozitie[128] = "Ana se duce la piata";
int lungime = strlen(propozitie);
int vocale = 0;
for(int i = 0; i < lungime; i++) {
if(eVocala(propozitie[i])) {
cout << "Vocala: " << propozitie[i] << "\n";
vocale = vocale + 1;
}
}
cout << "Avem: " << vocale << " vocale in text.";
return 0;
}

Palindromul unui cuvant | Sir de caractere in C++

In cateva probleme de Bacalaureat ni se cere sa calculam palindromul unui cuvant.


Pentru a face acest lucru vom lucra cu doua cuvinte „mere” si „cojoc”. Incepand de la
cap vom construii rand pe rand fiecare litera.

Algoritmul arata in felul urmator:

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

2
int main() {
char cuvant[10];
char palindrom[10];
cin >> cuvant;
int lungime = strlen(cuvant);
palindrom[lungime] = cuvant[lungime];
for(int i = 0; i < lungime; i++) {
palindrom[lungime - 1 - i] = cuvant[i];
}
cout << palindrom;
return 0;
}

Sufixul unui cuvant | Siruri de caractere in C++


Sa presupunem ca avem sufixul „aur” si propozitia „Am un dinozaur portocaliu care
este centaur„, trebuie sa identificam cuvintele care il au drept sufix pe „aur” (adica
acele cuvinte care se termina cu „aur”), mai precis: dinozaur si centaur. Pentru a face
acest lucru vom cauta in ultimele litere ale unui cuvant folosind pointerii.
Daca v-ati uitat la primul videoclip din aceasta seria atunci probabil stiti despre ce este
vorba. De exemplu, daca am un cuvant[10] = dinozaur si afisez cout << cuvant voi
obtine dinozaur. In schimb, daca execut cout << cuvant + 1 voi obtine inozaur.
Asadar, rezolvarea este urmatoarea:

#include <iostream>
#include <cstring>
using namespace std;
int main() {
char sufix[10] = "aur";
char propozitie[100] = "Am un dinozaur portocaliu care este centaur";
int lungime_sufix = strlen(sufix);
char *cuvant = strtok(propozitie, " ");
while(cuvant) {
int lungime_cuvant = strlen(cuvant);
int pozitie = lungime_cuvant - lungime_sufix;
if(pozitie > 0) {
char sufix_cuvant[10] = "";
strcpy(sufix_cuvant, cuvant + pozitie);
if(strcmp(sufix_cuvant, sufix) == 0)
cout << cuvant << "\n";
}
cuvant = strtok(NULL, " ");
}
return 0;
}

3
Prefixul unui cuvant | Siruri de caractere in C++

Acum vom presupune ca avem prefixul „sar” iar propozitia este „Nu imi plac sarmalele
si sardinele„, trebuie sa identificam cuvintele care il au drept prefix pe „sar” (adica acele
cuvinte care incep cu „sar”), mai precis: sarmalele si sardinele. Pentru a face acest
lucru vom folosii functia strncpy care copiaza primele n caractere ale unui cuvant.

Asadar, rezolvarea este urmatoarea:

#include <iostream>
#include <cstring>
using namespace std;
int main() {
char prefix[10] = "sar";
char propozitie[100] = "Nu imi plac sarmalele si sardinele";
int lungime_prefix = strlen(prefix);
char *cuvant = strtok(propozitie, " ");
while(cuvant) {
char prefix_cuvant[10] = "";
strncpy(prefix_cuvant, cuvant, lungime_prefix);
if(strcmp(prefix_cuvant, prefix) == 0)
cout << cuvant << "\n";
cuvant = strtok(NULL, " ");
}
return 0;
}

Numarul de aparitii al unui cuvant | Siruri de caractere in C++

Iar ultima dintre cele mai populare probleme este aceea in care trebuie sa numaram de
cate ori apare un cuvant intr-o propozitie. De exemplu daca avem propozitia: „Azi este
Soare si Mihai este milionar. Mihai se duce sa manance caracatita cu caramael” trebuie
sa numaram de cate ori apare „Mihai” in propozitie.

Pentru a rezolva aceasta problema, vom sparge propozitia in cuvinte si vom numara de
cate ori apare cuvantul cerut.

#include <iostream>
#include <cstring>
using namespace std;
int main() {
char cauta_cuvant[10] = "Mihai";
char propozitie[100] = "Azi este Soare si Mihai este milionar. Mihai se duce sa manance
caracatita cu caramael";
int nr = 0;

4
char *cuvant = strtok(propozitie, " ");
while(cuvant) {
if(strcmp(cuvant, cauta_cuvant) == 0)
nr = nr + 1;
cuvant = strtok(NULL, " ");
}
cout << cauta_cuvant << " a aparut de " << nr << " ori.\n";
return 0;
}

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