Advertisement
Guest User

Untitled

a guest
Mar 24th, 2019
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.00 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. 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. Нерабочая обработка аргументов, жалуется на неправильную трансформацию char* -> int.
  164.     while((i = getopt(argc,argv,"w:i:")) != -1){
  165.         if((int)i == (int)'w'){W = optarg;}
  166.         if((int)i == (int)'i'){i = optarg;}
  167.     }*/
  168.     inputFileName = argv[3];
  169.     outputFileName = argv[4];
  170.     setlocale(LC_ALL, "Russian");
  171.     //cout << "Enter File Name:";
  172.     //cin >> inputFileName;
  173.     fin.open(inputFileName/*"2.txt"*/);
  174.     fout.open(outputFileName);
  175.     if (!fin.is_open())
  176.     {
  177.         cout << "FATALERROR!";
  178.         return -1;
  179.     }
  180.  
  181.     getline(fin, stringBuffer);
  182.     Parse();
  183.  
  184.     for (int i = 1; getline(fin, stringBuffer); ++i)
  185.     {
  186.         Parse();
  187.     }
  188.  
  189.     abzac.push_back(inputBuffer);
  190.  
  191.     for (int i = 0; i < abzac.size(); i++)
  192.     {
  193.         fout << abzac[i] << endl;
  194.     }
  195.  
  196.     for (int i = 0; i < abzac.size(); i++)
  197.     {
  198.         //cout << endl << i << endl;
  199.         istringstream iss(abzac[i]);
  200.         redFlag = 1;
  201.  
  202.         if (abzac[i] == "EMPTY")
  203.         {
  204.             fout << spaceBuffer << processBuffer;
  205.             processBuffer = "";
  206.             spaceBuffer = "";
  207.             fout << '\n';
  208.             continue;
  209.         }
  210.  
  211.         while (iss >> word) {
  212.             //cout << word << " ";
  213.             if (redFlag == 1)
  214.             {
  215.                 Z = W - I;
  216.             }
  217.             else
  218.             {
  219.                 Z = W;
  220.             }
  221.  
  222.             if (processBuffer.size() + word.size() < Z)
  223.             {
  224.                 processBuffer += word + " ";
  225.             }
  226.             else
  227.             {
  228.                 //localLines.push_back(processBuffer);
  229.                 //processBuffer.erase(processBuffer.size() - 1);
  230.                 //processBuffer.pop_back();
  231.                 //cout << processBuffer << endl;
  232.                 processBuffer.pop_back();
  233.  
  234.                 if (redFlag == 1)
  235.                 {
  236.                     fout << string(I, ' ');
  237.                 }
  238.  
  239.                 Wide(processBuffer, Z);
  240.                 processBuffer = "";
  241.                 processBuffer += word += " ";
  242.                 redFlag = 0;
  243.                 //TODO Удлинение строки
  244.             }
  245.         }
  246.         //processBuffer.erase(processBuffer.size() - 1);
  247.         //localLines.push_back(processBuffer);
  248.         //processBuffer.pop_back();
  249.         //cout << processBuffer <<'#'<< endl;
  250.         //cout << endl;
  251.         fout << processBuffer << endl;
  252.         fout << endl;
  253.         processBuffer = "";
  254.  
  255.         //cout << "->" << abzac[i] << "<-" << endl;
  256.     }
  257.  
  258.     std::system("pause");
  259.  
  260.     return 1;
  261. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement