Scrieti un program C/C++ care citeste de la tastatura un text format din cel mult 200 de litere ale alfabetului englez, in care cuvintele sunt separate printr-un singur spatiu si afiseaza pe ecran numarul de cuvinte si cuvintele din textul citit, care sunt palindroame. In cazul in care in text nu exista niciun astfel de cuvant se va afisa pe ecran mesajul NU EXISTA.
Exemplu: daca textul introdus este: lupul sta pe un capac verde Pe ecran se va afisa: lupul capac 2
Va rog sa faceti programul, multumesc mult <3

Răspuns :

Răspuns:

#include <iostream>

#include <string>

using namespace std;

bool palindromF(string s)

{

   bool palindrom = true;

   for(int i = 0;i < ((s.length() / 2) + 1);i++)

   {

       if(s[i] != s[s.length() - 1 - i])

           palindrom = false;

   }

   return palindrom;

}

int main()

{

   cout<<"Introdu textul: ";

   //Acesta este ceva pentru a citi o linie! Poate intr-un program normal functioneaza si fara atatea doar facand cin>>s

   string readLine = "";

   

   string s = "";

   

   cin >> readLine;

   

   s = readLine;

   

   getline (cin, readLine);

   

   s += readLine;

   /////////////////////////////////////////////////////////////////////////////////////////////

   

   if(s.length()>200)

   {

       cout<<"Valoarea lungii textului tastat este mai mare ca si valoarea 200!";

       return 0;

   }

 

   cout<< "Textul introdus este: " + s <<endl;

   int nrPalindrom = 0;

   string* palindrom = new string[50];

   

   string word = "";

   

   int j = 0;

   int countAllWord = 0;

   

   for (int i = 0; i < s.length(); i++) {

       if(s[i] != ' ')

           word+=s[i];

       else

       {

           if(i != 0 && s[i-1] != ' ')

           {

               if(palindromF(word) == 1)

               {

                   palindrom[j] = word;

                   j++;

               }

               word = "";

               countAllWord++;

           }

       }

       if(i == s.length() - 1)

           if(i != 0 && s[i-1] != ' ')

           {

               if(palindromF(word) == 1)

                   palindrom[j] = word;

               countAllWord++;

           }

   }

   

   cout<<"Textul are " + to_string(countAllWord) + " cuvinte."<<endl;

   cout<<"Textul are " + to_string(j) + " cuvinte palindrom."<<endl;

   

   if(j == 0)

       cout<<"Nu exista numere palindrom.";

   

   for(int i = 0; i < j; i++)

   {

       

       cout<<palindrom[i];

       if(i<j-1)

            cout<<", ";

   }

   return 0;

}

Explicație:

Avem grija sa tratam fiecare cuvant din text, validam daca corespunde cerintelor ce se dau in ipoteza. Afisam numarul de cuvinte al textului, afisam numarul de cuvinte palindrom si apoi afisam si cuvintele palindrom. Toate literele la comparatie pentru palindrom sa fie de acelasi tip cu acelasi cod ASCII nu poti compara A cu a ca in cuvantul Ana.

Ex:

ana are mere - 1 cuv palindrom,

Ana are mere - 0 cuv palindrom,

AnA are mere - 1 cuv palindrom;