Guest User

Untitled

a guest
May 19th, 2019
65
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //TP 2018/2019: Zadaća 3, Zadatak 4
  2. #include <iostream>
  3. #include <string>
  4. #include <vector>
  5. #include <set>
  6. #include <list>
  7.  
  8. bool JesteSlovo (char c) {
  9. if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '1' && c <= '9')) return true;
  10. return false;
  11. }
  12. int DuzinaJednogStringa (std::string s) {
  13. int br_slova = 0;
  14. for (int i = 0; i < s.size(); i++) {
  15. if (JesteSlovo(s[i])) br_slova++;
  16. }
  17. return br_slova;
  18. }
  19.  
  20.  
  21. std::vector<std::set<std::string>> Razvrstavanje (std::vector<std::string> imena, int k) {
  22.  
  23. if (k < 1 || k > imena.size()) {
  24. throw std::logic_error("Razvrstavanje nemoguce");
  25. }
  26. std::vector<std::set<std::string>> v (k);
  27. int n = imena.size();
  28. std::list<std::string> lista (n);
  29. auto it = lista.begin();
  30.  
  31. for (int i = 0; i < imena.size(); i++) {
  32. *it = imena[i];
  33. it++;
  34. }
  35.  
  36. it = lista.begin();
  37. for ( int j = 0; j < k; j++) {
  38. if (j < (n % k)) {
  39. int brojac = 0;
  40. while (brojac < int (n/k) + 1) {
  41. //int velicina = (*it).size();
  42. int korak = DuzinaJednogStringa(*it)-1;
  43. v[j].insert(*it);
  44. it = lista.erase(it); //ovo
  45. //if(it == nullptr) break;
  46. if (it == lista.end()) it = lista.begin();
  47. //std::advance(it, korak);
  48. while (korak!=0) {
  49. it++; //ovo
  50. korak--;
  51. if (it == lista.end()) it = lista.begin(); //nema kod kruzne liste
  52. }
  53. brojac++;
  54. }
  55. }
  56. else {
  57. int brojac = 0;
  58. while (brojac < int (n/k)) {
  59. //int velicina = (*it).size();
  60. int korak = DuzinaJednogStringa(*it)-1;
  61. v[j].insert(*it);
  62. it = lista.erase(it);
  63. if (it == lista.end()) it = lista.begin();
  64. //std::advance (it, korak);
  65. while (korak!=0) {
  66. it++;
  67. korak--;
  68. if (it == lista.end()) it = lista.begin();
  69. }
  70. brojac++;
  71. }
  72. }
  73. }
  74. return v;
  75. }
  76.  
  77.  
  78. int main ()
  79. {
  80. int n;
  81. std::cout << "Unesite broj djece: ";
  82. std::cin >> n;
  83. std::cin.clear();
  84. std::cin.ignore(1000, '\n');
  85. std::vector<std::string> ime (n); //{"Damir", "Ana", "Muhamed", "Marko", "Ivan", "Mirsad", "Nikolina", "Alen", "Jasmina", "Merima"};
  86.  
  87. std::cout << "Unesite imena djece:";
  88. for (int i = 0; i < n; i++) {
  89. std::string s;
  90. std::getline(std::cin, s);
  91. ime[i] = s;
  92. /*std::cin.clear();
  93. std::cin.ignore(1000, '\n');*/
  94. }
  95. std::vector<std::set<std::string>> krajnji;
  96. int k;
  97. std::cout << "Unesite broj timova:";
  98. std::cin >> k;
  99. krajnji = Razvrstavanje (ime, k);
  100. for (int i = 0; i < krajnji.size(); i++) {
  101. std::cout << "Tim " << i + 1 << ": ";
  102. int j = 0;
  103. for (auto x : krajnji[i]) {
  104. std::cout << x ;
  105. j++;
  106. if (j!=krajnji[i].size()-1) std::cout << ","; //OVO UZME ZADNJI SKUP PA GA ISPISE BEZ RAZMAKA
  107. }
  108. /* for (int j = 0; j < krajnji[i].size(); j++) {
  109. std::cout << krajnji[i][j];
  110. if (krajnji[i].size() < krajnji[i].size()-1) std::cout << ", "; NE MOZE DVOSTRUKO INDEKSIRANJE
  111. }*/
  112. std::cout << std::endl;
  113. }
  114. return 0;
  115. }
RAW Paste Data