fork download
  1. #include <iostream>
  2. #include <cstring> // Pentru strchr()
  3. using namespace std;
  4.  
  5.  
  6.  
  7. int vowelCount(const char* word) {
  8. int numar = 0;
  9. const char* vocale = "aeiouAEIOU";
  10.  
  11. for (int i = 0; word[i] != '\0'; ++i) {
  12. if (strchr(vocale, word[i]) != 0) {
  13. numar++;
  14. }
  15. }
  16. return numar;
  17. }
  18.  
  19. // Funcție pentru a compara două cuvinte lexicografic
  20. int comparaCuvinte(const char* cuvant1, const char* cuvant2) {
  21. int i = 0;
  22. while (cuvant1[i] != '\0' && cuvant2[i] != '\0') {
  23. if (cuvant1[i] < cuvant2[i]) {
  24. return -1;
  25. } else if (cuvant1[i] > cuvant2[i]) {
  26. return 1;
  27. }
  28. i++;
  29. }
  30. if (cuvant1[i] == '\0' && cuvant2[i] == '\0') {
  31. return 0; // Cuvintele sunt egale
  32. } else if (cuvant1[i] == '\0') {
  33. return -1; // cuvant1 este mai scurt
  34. } else {
  35. return 1; // cuvant2 este mai scurt
  36. }
  37. }
  38.  
  39. // Funcție pentru a sorta cuvintele după numărul de vocale și lexicografic
  40. void sortareCuvinte(char cuvinte[][21], int numereVocale[], int numarCuvinte) {
  41. for (int i = 0; i < numarCuvinte - 1; ++i) {
  42. for (int j = i + 1; j < numarCuvinte; ++j) {
  43. if (numereVocale[i] > numereVocale[j] ||
  44. (numereVocale[i] == numereVocale[j] && comparaCuvinte(cuvinte[i], cuvinte[j]) > 0)) {
  45.  
  46. // Schimbă cuvintele
  47. char tempCuvant[21];
  48. strcpy(tempCuvant, cuvinte[i]);
  49. strcpy(cuvinte[i], cuvinte[j]);
  50. strcpy(cuvinte[j], tempCuvant);
  51.  
  52. // Schimbă numerele de vocale
  53. int tempNumarVocale = numereVocale[i];
  54. numereVocale[i] = numereVocale[j];
  55. numereVocale[j] = tempNumarVocale;
  56. }
  57. }
  58. }
  59. }
  60.  
  61. int main() {
  62. char text[1001];
  63. cin.getline(text, 1001);
  64.  
  65. char cuvinte[100][21]; // Maxim 100 de cuvinte, fiecare cu maxim 20 de caractere + '\0'
  66. int numereVocale[100];
  67. int numarCuvinte = 0;
  68.  
  69. char* word = strtok(text, " ");
  70. while (word != nullptr) {
  71. strcpy(cuvinte[numarCuvinte], word);
  72. numereVocale[numarCuvinte] = vowelCount(word);
  73. numarCuvinte++;
  74. word = strtok(nullptr, " ");
  75. }
  76.  
  77. sortareCuvinte(cuvinte, numereVocale, numarCuvinte);
  78.  
  79. for (int i = 0; i < numarCuvinte; ++i) {
  80. cout << cuvinte[i] << endl;
  81. }
  82.  
  83. return 0;
  84. }
Success #stdin #stdout 0.01s 5284KB
stdin
Ana are mere
Cosmin are portocale
stdout
Ana
are
mere