ascii_C++.cpp

  1  #include <iostream>         // cin, cout
  2  #include <fstream>          // fájlkezelés
  3  #include <string>           // string (szövegek)
  4  #include <vector>           // vector adattípus
  5  #include <algorithm>        // max_element
  6  #include <iomanip>          // setw, setprecision
  7  
  8  using namespace std;
  9  
 10  vector<string> beolvas(string fajl)
 11  {
 12      vector<string> abra;
 13      ifstream fbe;
 14      fbe.open(fajl);
 15      string sor;
 16      while(getline(fbe, sor))
 17      {
 18          abra.push_back(sor);
 19      }
 20      fbe.close();
 21      return abra;
 22  }
 23  
 24  bool hossz_szerint(string a, string b)
 25  {
 26      return a.size() < b.size();
 27  }
 28  
 29  void kiir(vector<string> abra, int ism, string fajl)
 30  {
 31      string sor, ende;
 32      ofstream fki;
 33      if(fajl != "")
 34          fki.open(fajl);
 35      if(ism == 1)
 36          ende = "";
 37      else
 38          ende = " |  ";
 39      string maxhossz = *max_element(abra.begin(), abra.end(), hossz_szerint);
 40  
 41      for(auto sor: abra)
 42      {
 43          for(int i = 0; i < ism; i++)
 44          {
 45              cout << left << setw(maxhossz.size()+2) << sor << ende;
 46              if(fajl != "") fki << left << setw(maxhossz.size()+2) << sor << ende;
 47          }
 48          cout << endl;
 49          if(fajl != "") fki << endl;
 50      }
 51      if(fajl != "") fki.close();
 52  }
 53  
 54  string atalakit(string blokkok)
 55  {
 56      string tomoritetlen = "";
 57      int x;
 58      for(int i = 0; i < blokkok.size(); i++)
 59      {
 60          if(i % 2 == 0)
 61              x = blokkok[i] - '0';
 62          else
 63              for(int j = 0; j < x; j++) tomoritetlen += blokkok[i];
 64      }
 65      return tomoritetlen;
 66  }
 67  
 68  void szg(string fajlin, string fajlout)
 69  {
 70      cout << "\n4. feladat" << endl;
 71      vector<string> forras = beolvas(fajlin);
 72      vector<string> abra;
 73      for(string sor: forras)
 74          abra.push_back(atalakit(sor));
 75      kiir(abra, 1, fajlout);
 76  }
 77  
 78  void tomorites_vizsgalat()
 79  {
 80      cout << "\n5. feladat" << endl;
 81      string t1, t2;
 82  
 83      cout << "Kérem adja meg a tömörített ábra fájlnevét: ";         // konyv_t.txt
 84      cin >> t1;
 85      cout << "Kérem adja meg a tömörítetlen ábra fájlnevét: ";       // konyv.txt
 86      cin >> t2;
 87      ifstream fbe1, fbe2;
 88      fbe1.open(t1);
 89      fbe2.open(t2);
 90      string sor, text1 = "", text2 = "";
 91      while(getline(fbe1, sor)) text1 += sor;
 92      while(getline(fbe2, sor)) text2 += sor;
 93      int t1_hossz = text1.size() - count(text1.begin(), text1.end(), '\n');
 94      int t2_hossz = text2.size() - count(text2.begin(), text2.end(), '\n');
 95      cout << "A karakterek száma a tömörített állományban: " << t1_hossz << endl;
 96      cout << "A karakterek száma a tömörítetlen állományban: " << t2_hossz << endl;
 97      cout << "A tömörítési arány: " << setprecision(2) << float(t1_hossz)/float(t2_hossz) << endl;
 98  }
 99  
100  void statisztika(string fajl)
101  {
102      cout << "\n6. feladat" << endl;
103      vector<string> abra = beolvas(fajl);
104      cout << "Az ábra magassága sorokban: " << abra.size() << endl;
105      vector<int> hosszak;
106      int blokkok = 0, hossz;
107      for(string sor: abra)
108      {
109          hossz = 0;
110          for(int i = 0; i < sor.size(); i++)
111          {
112              if(i % 2 == 0)
113              {
114                  hossz += (sor[i] - '0');
115                  blokkok += 1;
116              }
117          }
118          hosszak.push_back(hossz);
119  
120      }
121      int maxhossz = *max_element(hosszak.begin(), hosszak.end());
122      cout << "Az ábra szélessége karakterekben: " << maxhossz << endl;
123      cout << "A blokkok száma: " << blokkok << endl;
124  }
125  
126  int main()
127  {
128      setlocale(LC_ALL, "");
129      cout << "1. feladat" << endl;
130      vector<string> konyv = beolvas("konyv.txt");
131      kiir(konyv, 1, "");
132      cout << "\n2. feladat" << endl;
133      int ism;
134      cout << "Kérem adja meg az ismétlések számát: ";
135      cin >> ism;
136      kiir(konyv, ism, "");
137      szg("szg_t.txt", "szg.txt");
138      tomorites_vizsgalat();
139      statisztika("konyv_t.txt");
140      return 0;
141  }