Advertisement
THOMAS_SHELBY_18

Lab3_1(C++)

Nov 12th, 2023 (edited)
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.91 KB | Source Code | 0 0
  1. #include <iostream>
  2. #include <windows.h>
  3. #include <fstream>
  4. using namespace std;
  5.  
  6. void printCondition();
  7. int readNum(int min, int max);
  8. bool checkFile(string path);
  9. string readFile(string path);
  10. string inputTextFromFile();
  11. string inputTextFromConsole();
  12. string inputText();
  13. int getLastSymbIndex(string text);
  14. int getNextSpaceIndex(string text, int spaceIndex);
  15. string getNewWord(string text, int& spaceIndex, int numWord);
  16. void outputTextToConsole(string text);
  17. void outputTextToFile(string text);
  18. void outputText(string text);
  19.  
  20. void printCondition()
  21. {
  22.     cout << "Данная программа выведет каждое нечетное слово в кавычках, а каждое четное - в квадратных скобках" << endl;
  23. }
  24.  
  25. string inputText()
  26. {
  27.     int choice;
  28.     string text;
  29.  
  30.     cout << "Выберите вариант ввода:" << endl << "1. Ввод из консоли" << endl << "2. Ввод из файла" << endl << "Использовать вариант:";
  31.     choice = readNum(1, 2);
  32.  
  33.     if (choice == 1)
  34.     {
  35.         text = inputTextFromConsole();
  36.     }
  37.     else
  38.     {
  39.         text = inputTextFromFile();
  40.     }
  41.  
  42.     return text;
  43. }
  44.  
  45. string inputTextFromConsole()
  46. {
  47.     string text;
  48.     do
  49.     {
  50.         cout << "Введите текст:" << endl;
  51.         getline(cin, text);
  52.     }
  53.     while ((getLastSymbIndex(text) == 0) || (text.empty()));
  54.     text = " " + text + " ";
  55.  
  56.     return text;
  57. }
  58.  
  59. string inputTextFromFile()
  60. {
  61.     string pathFile, text;
  62.     bool isInputFromFileSuccessfully;
  63.  
  64.     cout << "Данные в файле должны содержать текст" << endl;
  65.     do
  66.     {
  67.         cout << "Введите путь к файлу и его имя с его расширением:";
  68.         cin >> pathFile;
  69.         isInputFromFileSuccessfully = checkFile(pathFile);
  70.     } while(!isInputFromFileSuccessfully);
  71.     text = readFile(pathFile);
  72.  
  73.     return text;
  74. }
  75.  
  76. bool checkFile(string path)
  77. {
  78.     ifstream fin;
  79.     bool isFileCorrect;
  80.     string checkText, bufText;
  81.  
  82.     isFileCorrect = true;
  83.  
  84.     fin.open(path);
  85.     if (!fin.is_open())
  86.     {
  87.         isFileCorrect = false;
  88.         cout << "Файл не найден!\nВнесите изменения в файл и повторите попытку!" << endl;
  89.     }
  90.     else
  91.     {
  92.         do
  93.         {
  94.             getline(fin, bufText);
  95.             checkText += bufText;
  96.         }
  97.         while (!fin.eof());
  98.  
  99.         if ((getLastSymbIndex(checkText) == 0) || (checkText.empty()))
  100.         {
  101.             isFileCorrect = false;
  102.             cout << "Файл пустой!\nВнесите изменения в файл и повторите попытку!" << endl;
  103.         }
  104.         fin.close();
  105.     }
  106.  
  107.     return isFileCorrect;
  108. }
  109.  
  110. string readFile(string path)
  111. {
  112.     ifstream fin;
  113.     string text, bufText;
  114.  
  115.     fin.open(path);
  116.     do
  117.     {
  118.         getline(fin, bufText);
  119.         text += bufText + " ";
  120.     }
  121.     while (!fin.eof());
  122.     fin.close();
  123.  
  124.     text = " " + text + " ";
  125.  
  126.     return text;
  127. }
  128.  
  129. int readNum(int min, int max)
  130. {
  131.     bool isIncorrect;
  132.     int num;
  133.  
  134.     do
  135.     {
  136.         isIncorrect = true;
  137.         cin >> num;
  138.         if (cin.fail() || (cin.get() != '\n'))
  139.         {
  140.             cout << "Некорректный ввод! Введите значение еще раз:" << endl;
  141.             cin.clear();
  142.             while (cin.get() != '\n');
  143.         }
  144.         else
  145.         {
  146.             if (num < min || num > max)
  147.             {
  148.                 cout << "Недопустимое значение! Введите значение еще раз:" << endl;
  149.             }
  150.             else
  151.             {
  152.                 isIncorrect = false;
  153.             }
  154.         }
  155.     }
  156.     while (isIncorrect);
  157.  
  158.     return num;
  159. }
  160.  
  161. int getLastSymbIndex(string text)
  162. {
  163.     int i;
  164.     char c;
  165.     i = text.length() - 1;
  166.     do
  167.     {
  168.         i--;
  169.         c = text[i];
  170.     }
  171.     while((c == 32) && (i != 0));
  172.  
  173.     return i;
  174. }
  175.  
  176. int getNextSpaceIndex(string text, int spaceIndex)
  177. {
  178.     int i;
  179.     char c;
  180.     i = spaceIndex;
  181.     do
  182.     {
  183.         i++;
  184.         c = text[i];
  185.     }
  186.     while(c != 32);
  187.  
  188.     return i;
  189. }
  190.  
  191. string getNewWord(string text, int& spaceIndex, int numWord)
  192. {
  193.     int i, nextSpaceIndex;
  194.     string word;
  195.     char beginSym, endSym;
  196.  
  197.     do
  198.     {
  199.         nextSpaceIndex = getNextSpaceIndex(text, spaceIndex);
  200.         spaceIndex++;
  201.     }
  202.     while (nextSpaceIndex - spaceIndex == 0);
  203.  
  204.     i = spaceIndex;
  205.  
  206.     if (numWord % 2 == 1)
  207.     {
  208.         beginSym = '"';
  209.         endSym = '"';
  210.     }
  211.     else
  212.     {
  213.         beginSym = '[';
  214.         endSym = ']';
  215.     }
  216.  
  217.     word = beginSym;
  218.     do
  219.     {
  220.         word += text[i];
  221.         i++;
  222.     }
  223.     while (i != nextSpaceIndex);
  224.     word += endSym;
  225.  
  226.     spaceIndex = nextSpaceIndex;
  227.  
  228.     return word;
  229. }
  230.  
  231. string getNewText(string text)
  232. {
  233.     int spaceIndex, numWord, lastSpaceIndex;
  234.     string newWord, newText;
  235.  
  236.     spaceIndex = 0;
  237.     numWord = 1;
  238.     lastSpaceIndex = getLastSymbIndex(text) + 1;
  239.  
  240.     do
  241.     {
  242.         newWord = getNewWord(text, spaceIndex, numWord);
  243.         newText += newWord + ' ';
  244.         numWord++;
  245.     }
  246.     while (spaceIndex != lastSpaceIndex);
  247.  
  248.     return newText;
  249. }
  250.  
  251. void outputText(string text)
  252. {
  253.     int  choice;
  254.  
  255.     cout << "Выберите вариант вывода:" << endl << "1. Вывод в консоль" << endl << "2. Вывод в файл" << endl << "Использовать вариант:";
  256.     choice = readNum(1, 2);
  257.  
  258.     if (choice == 1)
  259.     {
  260.         outputTextToConsole(text);
  261.     }
  262.     else
  263.     {
  264.         outputTextToFile(text);
  265.     }
  266. }
  267.  
  268. void outputTextToConsole(string text)
  269. {
  270.     cout << text;
  271. }
  272.  
  273. void outputTextToFile(string text)
  274. {
  275.     ofstream fout;
  276.     string path;
  277.     bool isFileIncorrect;
  278.  
  279.     cout << "Для вывода введите путь к файлу и его имя c расширением." << endl;
  280.     cout << "Если файл отсутствует то он будет создан автоматически по указанному пути или в корневой папке программы (по умолчанию)" << endl;
  281.     do
  282.     {
  283.         cout << "Введите путь:";
  284.         cin >> path;
  285.         fout.open(path);
  286.         isFileIncorrect = false;
  287.  
  288.         fout << text;
  289.         if (fout.fail())
  290.         {
  291.             cout << "Не удалось вывести в файл! ";
  292.             isFileIncorrect = true;
  293.             fout.clear();
  294.         }
  295.     }
  296.     while (isFileIncorrect);
  297.  
  298.     fout.close();
  299.     cout << "Вывод данных... успешно!";
  300. }
  301.  
  302. int main()
  303. {
  304.     string textIn, newText;
  305.  
  306.     SetConsoleOutputCP(CP_UTF8);
  307.  
  308.     printCondition();
  309.     textIn = inputText();
  310.     newText = getNewText(textIn);
  311.     outputText(newText);
  312.     return 0;
  313. }
  314.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement