Răspuns :
► Program C++
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <fstream>
#include <cstring>
#include <algorithm>
using namespace std;
struct cuvant {
char s[20] = "";
unsigned nr_vocale = 0;
};
//Functie care calculeaza cate vocale sunt in sirul transmis ca parametru
unsigned calculare_nr_vocale(char* s) {
static const char voc[] = "AEIUOaeiou";
unsigned nr_vocale = 0;
for (int i = 0; i < strlen(s); i++) {
if (strchr(voc, s[i])!=nullptr) nr_vocale++;
}
return nr_vocale;
}
//Stabileste relatia < intre doua cuvinte conform enuntului problemei
bool comparator_cuvinte(const cuvant& a, const cuvant& b) {
if(a.nr_vocale != b.nr_vocale) return a.nr_vocale < b.nr_vocale;
return strcmp(a.s, b.s) < 0;
}
int main() {
char curent[20];
cuvant vector_cuvinte[100];
int nr_cuv = 0;
//Citeste cuvantul si pune-l in vectorul de cuvinte
while (cin>>curent) {
strcpy(vector_cuvinte[nr_cuv].s, curent);
vector_cuvinte[nr_cuv].nr_vocale = calculare_nr_vocale(curent);
nr_cuv++;
}
//Sorteaza cuvintele dupa numarul de vocale
sort(vector_cuvinte, vector_cuvinte + nr_cuv, comparator_cuvinte);
//Afiseaza rezultat
for (int i = 0; i < nr_cuv; i++) {
cout << vector_cuvinte[i].s << endl;
}
}
Explicatie :
- Folosim o structura "cuvant" care memoreaza fiecare cuvant, dar si numarul de vocale din cuvantul respectiv
- Folosim functia std::sort din algorithm pentru a sorta eficient cuvintele. Aceasta functie primeste ca parametru pointer catre primul element din vector, pointer catre prima adresa de memorie care nu face parte din vector (locatia de memorie aflata imediat dupa ultimul element din vector). Functia sorteaza elementele in mod crescator dupa operatia '<'. Deoarece pentru structura noastra cuvant nu exista relatie de < definita vom folosi o functie comparator. Aceasta primeste doua elemente de tip cuvant si returneaza 1 daca cele doua cuvinte sunt in ordinea ceruta si 0 daca acestea trebuie inversate. Puteam folosi orice tip de sortare dar aceasta ofera o eficienta foarte buna si e foarte usor de folosit.
Vă mulțumim că ați vizitat site-ul nostru dedicat Informatică. Sperăm că informațiile oferite v-au fost de ajutor. Dacă aveți întrebări sau nevoie de asistență suplimentară, nu ezitați să ne contactați. Ne vedem curând și nu uitați să ne adăugați la marcaje!