Advertisement
Guest User

Untitled

a guest
Mar 24th, 2019
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.73 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <fstream>
  4. #include <cstring>
  5. #include <clocale>
  6. #include <sstream>
  7. #include <vector>
  8. #include <unistd.h>
  9. #include <regex>
  10. using namespace std;
  11. int numberOfSpaces;
  12. int W = 65;
  13. int I = 5;
  14. int Z;
  15. int i;
  16. int emptyString = 0;
  17. int redFlag;
  18. int bufferSpaceCounter = 0;
  19. char buffer;
  20. string inputFileName;
  21. string outputFileName;
  22. string line;
  23. string inputBuffer;
  24. string spaceBuffer;
  25. string stringBuffer;
  26. string word;
  27. string processBuffer;
  28. char *char_array;
  29. istringstream iss;
  30. vector<string> abzac;
  31. vector<string> lines;
  32. vector<string> localLines;
  33. ifstream fin;
  34. ofstream fout;
  35.  
  36.  
  37. void Parse()
  38. {
  39.     //cout << stringBuffer << endl;
  40.     stringBuffer += ' ';
  41.     if (stringBuffer.size() == 0)
  42.     {
  43.         abzac.push_back("EMPTY");
  44.         return;
  45.     }
  46.  
  47.     for (int i = 0; i < stringBuffer.size(); i++)
  48.     {
  49.         if ((stringBuffer[i] == ' ') || (stringBuffer[i] == '\t'))
  50.         {
  51.             bufferSpaceCounter++;
  52.         }
  53.  
  54.         if (bufferSpaceCounter == stringBuffer.size())
  55.         {
  56.             bufferSpaceCounter = 0;
  57.             abzac.push_back("EMPTY");
  58.         }
  59.     }
  60.  
  61.     for (int i = 0; i < stringBuffer.size(); i++)
  62.     {
  63.         buffer = stringBuffer[i];
  64.         //cout << buffer << " ";
  65.  
  66.         if (buffer == ' ' || buffer == '\t')
  67.         {
  68.             numberOfSpaces++;
  69.             spaceBuffer += buffer;
  70.         }
  71.         else
  72.         {
  73.             if (numberOfSpaces >= 2)
  74.             {
  75.                 emptyString = 0;
  76.                 abzac.push_back(inputBuffer);
  77.                 inputBuffer = "";
  78.                 spaceBuffer = "";
  79.                 numberOfSpaces = 0;
  80.             }
  81.  
  82.             emptyString = 0;
  83.             inputBuffer += spaceBuffer + buffer;
  84.             numberOfSpaces = 0;
  85.             spaceBuffer = "";
  86.         }
  87.     }
  88. }
  89.  
  90. void Wide(string input, int W)
  91. {
  92.  
  93.     //cout << input << endl;
  94.     for (int i = 0; i < input.size() - 1; i++)
  95.     {
  96.         //cout << input[i] << " ";
  97.     }
  98.     //cout << endl;
  99.  
  100.     for (int i = 0; i < input.size() - 1; i++)
  101.     {
  102.         if (input.size() < W) {
  103.             if ((input[i] == '.') || (input[i] == '?') || (input[i] == '!')) {
  104.                 input.insert(i + 1, 1, ' ');
  105.                 //cout << input << endl;
  106.             }
  107.         }
  108.     }
  109.     //cout << endl;
  110.  
  111.     for (int i = 0; i < input.size() - 1; i++)
  112.     {
  113.         if ((input.size() < W) && ((input[i] == ',') || (input[i] == ';') || (input[i] == ':'))) {
  114.             input.insert(i + 1, 1, ' ');
  115.             //cout << input << endl;
  116.         }
  117.     }
  118.  
  119.     //cout << endl;
  120.     for (int i = 0; i < input.size() - 1; i++)
  121.     {
  122.         if ((input.size() < W)) {
  123.             if (input[i + 1] == '-') {
  124.                 input.insert(i + 1, 1, ' ');
  125.                 i++;
  126.                 //cout << input << endl;
  127.             }
  128.             if (input[i] == '-') {
  129.                 input.insert(i + 1, 1, ' ');
  130.                 //cout << input << endl;
  131.             }
  132.         }
  133.  
  134.     }
  135.  
  136.     for (int i = 0; i < input.size() - 1; i++)
  137.     {
  138.         if ((input.size() < W) && (input[i] == ' '))
  139.         {
  140.             input.insert(i++, 1, ' ');
  141.             //cout << input << endl;
  142.         }
  143.  
  144.     }
  145.     //cout << endl;
  146.     fout << input << endl;
  147. }
  148.  
  149.  
  150.  
  151.  
  152.  
  153. int main(int argc, char *argv[])
  154. {
  155.  
  156.     if((argc < 3)||(argc > 5)){
  157.         cout << "WRONG COMMANDLINE ARGUMENTS!" << endl;
  158.         return -2;
  159.     }
  160.     W = atoi(argv[1]);
  161.     I = atoi(argv[2]);
  162.  
  163.     inputFileName = argv[3];
  164.     outputFileName = argv[4];
  165.     setlocale(LC_ALL, "Russian");
  166.     //cout << "Enter File Name:";
  167.     //cin >> inputFileName;
  168.     fin.open(inputFileName/*"2.txt"*/);
  169.     fout.open(outputFileName);
  170.     if ((!fin.is_open())||(!fout.is_open()))
  171.     {
  172.         cout << "FATALERROR!";
  173.         return -1;
  174.     }
  175.  
  176.     getline(fin, stringBuffer);
  177.     Parse();
  178.  
  179.     for (int i = 1; getline(fin, stringBuffer); ++i)
  180.     {
  181.         Parse();
  182.     }
  183.  
  184.     abzac.push_back(inputBuffer);
  185.  
  186.     for (int i = 0; i < abzac.size(); i++)
  187.     {
  188.         fout << abzac[i] << endl;
  189.     }
  190.  
  191.     for (int i = 0; i < abzac.size(); i++)
  192.     {
  193.         //cout << endl << i << endl;
  194.         istringstream iss(abzac[i]);
  195.         redFlag = 1;
  196.  
  197.         if (abzac[i] == "EMPTY")
  198.         {
  199.             fout << spaceBuffer << processBuffer;
  200.             processBuffer = "";
  201.             spaceBuffer = "";
  202.             fout << '\n';
  203.             continue;
  204.         }
  205.  
  206.         while (iss >> word) {
  207.             //cout << word << " ";
  208.             if (redFlag == 1)
  209.             {
  210.                 Z = W - I;
  211.             }
  212.             else
  213.             {
  214.                 Z = W;
  215.             }
  216.  
  217.             if (processBuffer.size() + word.size() < Z)
  218.             {
  219.                 processBuffer += word + " ";
  220.             }
  221.             else
  222.             {
  223.                 //localLines.push_back(processBuffer);
  224.                 //processBuffer.erase(processBuffer.size() - 1);
  225.                 //processBuffer.pop_back();
  226.                 //cout << processBuffer << endl;
  227.                 processBuffer.pop_back();
  228.  
  229.                 if (redFlag == 1)
  230.                 {
  231.                     fout << string(I, ' ');
  232.                 }
  233.  
  234.                 Wide(processBuffer, Z);
  235.                 processBuffer = "";
  236.                 processBuffer += word += " ";
  237.                 redFlag = 0;
  238.                 //TODO Удлинение строки
  239.             }
  240.         }
  241.         //processBuffer.erase(processBuffer.size() - 1);
  242.         //localLines.push_back(processBuffer);
  243.         //processBuffer.pop_back();
  244.         //cout << processBuffer <<'#'<< endl;
  245.         //cout << endl;
  246.         fout << processBuffer << endl;
  247.         fout << endl;
  248.         processBuffer = "";
  249.  
  250.         //cout << "->" << abzac[i] << "<-" << endl;
  251.     }
  252.  
  253.     std::system("pause");
  254.  
  255.     return 1;
  256. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement