fork download
  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4.  
  5. class Literka
  6. {
  7. public:
  8. char nazwa = 0;
  9. int ilosc = 0;
  10. int ascii = 0;
  11. };
  12.  
  13. void sort(Literka * t, int l, int p) // quicksort
  14. {
  15. int v = t[(l + p) / 2].ascii;
  16. int i = l;
  17. int j = p;
  18. Literka bufor;
  19. do
  20. {
  21. while (t[i].ascii < v) i++;
  22. while (t[j].ascii > v) j--;
  23. if (i <= j)
  24. {
  25. bufor = t[j];
  26. t[j] = t[i];
  27. t[i] = bufor;
  28. i++;
  29. j--;
  30. }
  31. } while (i <= j);
  32. if (j > l) sort(t, l, j);
  33. if (i < p) sort(t, i, p);
  34. }
  35.  
  36. int main()
  37. {
  38. int pozycja = 0; // ilość zapisanych literek
  39. Literka tab[60]; // tablica na literki
  40. unsigned int N;
  41. cin >> N;
  42. cin.ignore();
  43. if (N > 150) return 0; // N <= 150
  44. while (N--)
  45. {
  46. string napis;
  47. getline(cin, napis);
  48. if (napis.size() > 200) return 0; //maks. 200 znaków
  49. for (int i = 0; i < napis.size(); i++) // tylko a-z, A-Z i spacja
  50. {
  51. if (((int)napis[i] < 65 && (int)napis[i] != 32) ||
  52. ((int)napis[i] > 90 && (int)napis[i] < 97) ||
  53. (int)napis[i] > 122) return 0;
  54. }
  55.  
  56. for (int i = 0; i < napis.size(); i++) // zapisywanie liter
  57. {
  58. bool a = true; // pomocniczy bool, true na starcie
  59. if (napis[i] == ' '); // jesli spacja nie zapisuj
  60. else // jezeli litery
  61. {
  62. for (int j = 0; j < pozycja; j++) // szukamy czy litera juz wystapila
  63. {
  64. if (tab[j].nazwa == napis[i]) // jesli znaleziono
  65. {
  66. tab[j].ilosc++; // zwiekszam ilosc
  67. a = false; // bool wylaczony
  68. }
  69. }
  70. if(a) // jezeli nie znaleziono litery to ja dodajemy bool = true, jezeli znaleziono bool = false;
  71. {
  72. tab[pozycja].nazwa = napis[i];
  73. tab[pozycja].ilosc++;
  74. pozycja++; //tablica liter zwiekszona o jedna
  75. }
  76. }
  77. }
  78. }
  79. for (int i = 0; i < pozycja; i++) //dodaje skladnik int ascii do kazdej zapisanej pozycji
  80. {
  81. tab[i].ascii = (int)tab[i].nazwa; // konwersja
  82. if (tab[i].ascii > 64 && tab[i].ascii < 91) tab[i].ascii += 100; // jezeli duze to na potrzeby sortowania zwiekszam
  83. }
  84.  
  85. sort(tab, 0, pozycja - 1); // sortowanie
  86.  
  87. for (int i = 0; i < pozycja; i++) // wypisanie liter
  88. {
  89. cout << tab[i].nazwa << " " << tab[i].ilosc << endl;
  90. }
  91. }
Success #stdin #stdout 0s 16064KB
stdin
2
ala ma kota
Ola ma psa
stdout
a 7
k 1
l 2
m 2
o 1
p 1
s 1
t 1
O 1