Advertisement
Guest User

Untitled

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