Informatică, întrebare adresată de hello0world, 8 ani în urmă

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

Răspuns de Rayzen
0

#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;

}

Alte întrebări interesante