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

Se dă un text care conține doar cuvinte formate din litere mici și mari ale alfabetului englez și spații. Să se afișeze cuvintele din text, ordonate crescător în funcție de numărul de vocale. În cazul în care două cuvinte au același număr de vocale, se vor afișa în ordine lexicografică.

Date de intrare
Cuvintele citite vor fi separate prin spații și pot apărea pe mai multe linii.

Date de ieșire
Pe ecran se vor afișa cuvintele textului ordonate după criteriul din enunț, câte un cuvânt pe o linie.

Restricții
Șirul va conține maxim 1 000 de caractere
Fiecare cuvânt va conține maxim 20 caractere
Textul va conține maxim 100 de cuvinte
O linie va conține maxim 1 000 de caractere
Exemplu
Date de intrare
Ana are mere
Cosmin are portocale
Date de ieșire
Ana
Cosmin
are
are
mere
portocale
Va rog sa ma ajutati cu o rezolvare folosind bibliotecile iostream si cstring. Multumesc

Răspunsuri la întrebare

Răspuns de BogdanNuExista
0

#include <bits/stdc++.h>

using namespace std;

int main()

{

   char s[1001],a[101][101],*p;

   int k=0;

   cin.getline(s,1000);

   p=strtok(s," ");

   while(p)

   {

       strcpy(a[k],p);

       k++;

       p=strtok(NULL," ");

   }

   int v[k]={0},c=0;

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

   {

       int s=0;

       for(int j=0;j<strlen(a[i]);j++)

           if(strchr("aeiouAEIOU",a[i][j]))

               s++;

       v[c]=s;

       c++;

   }

   for(int i=0;i<k-1;i++)

       for(int j=i+1;j<k;j++)

           if(v[i]>v[j])

               swap(v[i],v[j]),swap(a[i],a[j]);

   for(int i=0;i<k-1;i++)

       for(int j=i+1;j<k;j++)

           if(v[i]==v[j] && strcmp(a[i],a[j])>0)

               swap(a[i],a[j]);

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

       cout<<a[i]<<'\n';

   return 0;

}

/* vezi sa citesti ambele propozitii pe acelasi rand ( in enunt
ai specificat ca e un text separat doar prin spatii )

*/

Anexe:

Patrick100: Multumesc frumos
Patrick100: Scrie la datele de intrare ca textul poate aparea pe mai multe lini "Cuvintele citite vor fi separate prin spații și pot apărea pe mai multe linii."
Alte întrebări interesante