Posted By

jajojejeje on 11/21/18


Tagged

Lab5aSTL


Versions (?)

Lab5a_STL


 / Published in: C++
 

Lab5aSTL

  1. #include "pch.h"
  2. #include <iostream>
  3. #include <queue>
  4. #include <list>
  5. #include <fstream>
  6. #include <string>
  7.  
  8. using namespace std;
  9.  
  10. //deklaracja funkcji i klas
  11. bool porownajDlugosciKolejek(queue<string> a, queue<string> b);
  12. ostream& operator<<(ostream& o,queue<string> q);
  13. class Mikser;
  14. template <class Conteiner>
  15. class Domieszka;
  16. class PorownajDlugosciKolejek;
  17.  
  18. //deklaracja pol klas i metod klas
  19. class Mikser : public list<queue<string>> {
  20. void rozdzielWyrazyDoKolejki(string linia);
  21. public:
  22. Mikser();
  23. Mikser(string nazwapliku);
  24. ~Mikser();
  25. void open(string nazwaPliku);
  26. void execute();
  27. void write(string nazwaPliku);
  28.  
  29. };
  30.  
  31. //template <class Conteiner>
  32. //class Domieszka : public Conteiner {
  33. //public:
  34. // void write(string nazwaPliku);
  35. //};
  36.  
  37. class PorownajDlugosciKolejek {
  38. int z=0;
  39. public:
  40. bool operator()(queue<string> a, queue<string> b) {
  41. cout << z++ << endl;
  42. if (a.size() > b.size())
  43. return true;
  44. else
  45. return false;
  46. }
  47. };
  48.  
  49. //implementacja metod i funkcji
  50.  
  51. Mikser::Mikser(){}
  52.  
  53. Mikser::Mikser(string nazwapliku)
  54. {
  55. open(nazwapliku);
  56. }
  57.  
  58. Mikser::~Mikser()
  59. {
  60. while (!this->empty()) {
  61. while (!this->front().empty()) this->front().pop();
  62. this->pop_front();
  63. }
  64. }
  65.  
  66. void Mikser::open(string nazwaPliku)
  67. {
  68. fstream plik(nazwaPliku);
  69. string linia;
  70. while (getline(plik,linia))
  71. {
  72. if (linia.size()>0)
  73. rozdzielWyrazyDoKolejki(linia);
  74. }
  75. plik.close();
  76. }
  77.  
  78. void Mikser::execute()
  79. {
  80. PorownajDlugosciKolejek pdk;
  81. this->sort(pdk);
  82. }
  83.  
  84. void Mikser::write(string nazwaPliku)
  85. {
  86. fstream f(nazwaPliku,fstream::out);
  87. list<queue<string>>::iterator i = this->begin();
  88. while (i!=this->end())
  89. {
  90. f<<*i;
  91. ++i;
  92. }
  93. f.close();
  94. }
  95.  
  96. void Mikser::rozdzielWyrazyDoKolejki(string linia) {
  97. std::string delimiter = " ";
  98. size_t pos = 0;
  99. std::string token;
  100. queue<string> q;
  101. while ((pos = linia.find(delimiter)) != std::string::npos) {
  102. token = linia.substr(0, pos);
  103. //std::cout << token << std::endl;
  104. q.push(token);
  105. linia.erase(0, pos + delimiter.length());
  106. }
  107. q.push(linia.substr(0, pos));
  108. this->push_front(q);
  109. }
  110.  
  111. //bool porownajDlugosciKolejek(queue<string> a, queue<string> b) {
  112. // if (a.size() > b.size())
  113. // return true;
  114. // else
  115. // return false;
  116. //}
  117.  
  118. ostream & operator<<(ostream & o, queue<string> q)
  119. {
  120. o << q.size() << ": ";
  121. while (!q.empty())
  122. {
  123. o << q.front() << " ";
  124. q.pop();
  125. }
  126. o << endl;
  127. return o;
  128. }
  129.  
  130. //template<class Conteiner>
  131. //void Domieszka<Conteiner>::write(string nazwaPliku)
  132. //{
  133. //
  134. // //iterator i = this->begin();
  135. // //while (i!=this->end()) {
  136. // // //(*i)
  137. // // ++i;
  138. // //}
  139. //}
  140.  
  141. int main()
  142. {
  143. Mikser mikser;
  144. //queue<string> kolejka;
  145. //kolejka.push("ala");
  146. //mikser.push_front(kolejka);
  147. //string s = mikser.front().front();
  148. mikser.open("plik.txt");
  149. string s = mikser.front().front();
  150. mikser.execute();
  151. mikser.write("plikPosortowany.txt");
  152. //Domieszka<Mikser> domieszka;
  153. //domieszka.open("plik.txt");
  154. //domieszka.write("plikDomieszka.txt");
  155.  
  156.  
  157. //string t =
  158. std::cout << "Hello World!\n";
  159. }

Report this snippet  

You need to login to post a comment.