Spunem ca doua cuvinte A si B rimeaza, daca sufixul lui A care incepe cu ultima vocala coincide cu sufixul lui B care incepe cu ultima vocala. De exemplu, cuvintele 'savant' si 'gigant' rimeaza. Scrieti un program c++ care citeste de la tastatura, de pe prima linie S, in text de lungime maxima 255 caractere, litere mici si spatiii, iar de pe a doua linie, un cuvant C, cu cel putin 3 si cel mult 30 de litere, dintre care cel putin una este vocala. Textul este format din cuvinte separate prin unul sau mai multe spatii. Programul va afisa pe linii diferite cuvintele din text care rimeaza cu C sau mesajul NU EXISTA, daca S nu contine astfel de cuvinte.
Exemplu:
true is bool and school is cool
tool
se va afisa:
bool
school
cool
Răspunsuri la întrebare
#include <iostream>
#include <string>
#include <vector>
using namespace std;
// Functie care determina daca un caracter este vocala sau nu
bool esteVocala(char c)
{
return c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u';
}
// Functie care determina daca doua cuvinte rimeaza sau nu
bool rimeaza(const string& cuvant1, const string& cuvant2)
{
// Determinam ultima vocala din primul cuvant
int i = cuvant1.length() - 1;
while (i >= 0 && !esteVocala(cuvant1[i]))
{
i--;
}
// Determinam ultima vocala din al doilea cuvant
int j = cuvant2.length() - 1;
while (j >= 0 && !esteVocala(cuvant2[j]))
{
j--;
}
// Verificam daca sufixul care incepe cu ultima vocala din primul cuvant coincide
// cu sufixul care incepe cu ultima vocala din al doilea cuvant
if (i >= 0 && j >= 0)
{
return cuvant1.substr(i) == cuvant2.substr(j);
}
// Daca niciunul dintre cuvinte nu are vocala, atunci nu rimeaza
return false;
}
int main()
{
// Citim textul si cuvantul
string text, cuvant;
getline(cin, text);
getline(cin, cuvant);
// Determinam cuvintele din text
vector<string> cuvinte;
int start = 0;
for (int i = 0; i < text.length(); i++)
{
if (text[i] == ' ')
{
cuvinte.push_back(text.substr(start, i - start));
start = i + 1;
}
}
cuvinte.push_back(text.substr(start));
// Afisam cuvintele din text care rimeaza cu cuvantul dat
bool exista = false;
for (const string& cuvant_text : cuvinte)
{
if (rimeaza(cuvant_text, cuvant))
{
cout << cuvant_text << endl;
exista = true;
}
}
// Daca nu exista astfel de cuvinte, afisam mesajul "NU EXISTA"
if (!exista)
{
cout << "NU EXISTA";
}
return 0;
}