Advertisement
gguuppyy

лаба3н1

Nov 26th, 2023 (edited)
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.60 KB | Source Code | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <windows.h>
  4. #include <string>
  5.  
  6.  
  7. using namespace std;
  8.  
  9. string SubString(string s, int begin, int end)
  10. {
  11.     string res = "";
  12.     for (int i = begin; i < end; i++)
  13.     {
  14.         res += s[i];
  15.     }
  16.     return res;
  17. }
  18. string MinWordLen(string s, int& indexBegin)
  19. {
  20.  
  21.  
  22.     string minWord = s;//если слово одно, оно сразу же будет равно строке
  23.     string word = "";
  24.  
  25.  
  26.     int index = 0;
  27.     bool checkPr;
  28.     for (int i = 0; i < s.length(); i++)
  29.     {
  30.         checkPr = false;
  31.         if (s[i] == ' ')
  32.         {
  33.             checkPr = true;
  34.             word = SubString(s, index, i);
  35.  
  36.         }
  37.         if (i == s.length() - 1)
  38.         {
  39.             word = SubString(s, index, i + 1);
  40.         }
  41.  
  42.         if (minWord.length() > word.length() && word.length() != 0)
  43.         {
  44.             indexBegin = index;
  45.             minWord = word;
  46.         }
  47.         if (checkPr)
  48.         {
  49.             index = i + 1;
  50.         }
  51.     }
  52.  
  53.     return minWord;
  54. }
  55.  
  56.  
  57.  
  58.  
  59. void printInfo() {
  60.     cout << "Программа находит самое короткое слово в предложении и выводит позицию, с которой оно начинается\n";
  61. }
  62.  
  63.  
  64.  
  65. string input(bool& isIncorrect) {
  66.     string str;
  67.     getline(cin, str);
  68.     if (str.empty()) {
  69.         isIncorrect = true;
  70.         cerr << "Ошибка. Строка не может быть пустой.\n";
  71.     }
  72.     return str;
  73. }
  74.  
  75. string readTextFromConsole() {
  76.     string text;
  77.     bool isIncorrect;
  78.     do {
  79.         isIncorrect = false;
  80.         cout << "Введите строку:\n";
  81.         text = input(isIncorrect);
  82.     } while (isIncorrect);
  83.     return text;
  84. }
  85.  
  86.  
  87. bool checkExtension(string path) {
  88.     return SubString(path, path.length() - 4, path.length()) == ".txt";
  89. }
  90.  
  91. string readPath() {
  92.     ifstream fin;
  93.     string path;
  94.     bool isIncorrect;
  95.     cout << "Введите путь к файлу:\n";
  96.     do {
  97.         isIncorrect = false;
  98.         cin >> path;
  99.         fin.open(path);
  100.         if (!fin.is_open() || fin.fail()) {
  101.             isIncorrect = true;
  102.             cout << "Файл недоступен. Повторите ввод:\n";
  103.         }
  104.         else if (!checkExtension(path)) {
  105.             isIncorrect = true;
  106.             cout << "Неправильное расширение файла. Повторите ввод:\n";
  107.         }
  108.         fin.close();
  109.         while (cin.get() != '\n');
  110.     } while (isIncorrect);
  111.     return path;
  112. }
  113.  
  114. string readTextFromFile(ifstream& fin) {
  115.     string text;
  116.     getline(fin, text);
  117.     if (text.empty()) {
  118.         cout << "Ошибка. Файл пуст. ";
  119.     }
  120.     return text;
  121. }
  122.  
  123. string readFile() {
  124.     string path, text;
  125.     int indexBeginWord;
  126.  
  127.     path = readPath();
  128.     ifstream fin(path);
  129.     text = readTextFromFile(fin);
  130.     fin.close();
  131.     return text;
  132. }
  133.  
  134. string chooseAction() {
  135.     string input;
  136.     bool isIncorrect;
  137.     do {
  138.         isIncorrect = false;
  139.         cin >> input;
  140.         if ((input != "console") && (input != "file")) {
  141.             isIncorrect = true;
  142.             cout << "Ошибка. Введите 'console' или 'file':\n";
  143.         }
  144.     } while (isIncorrect);
  145.     return input;
  146. }
  147.  
  148. string chooseInput() {
  149.     string option, text;
  150.     cout << "Выберите способ ввода данных.\n" <<
  151.         "Введите 'console', если хотите ввести данные через консоль.\n" <<
  152.         "Введите 'file', если хотите передать данные из файла.\n";
  153.     option = chooseAction();
  154.     while (cin.get() != '\n');
  155.     if (option == "console") {
  156.         text = readTextFromConsole();
  157.     }
  158.     else
  159.         text = readFile();
  160.     return text;
  161. }
  162.  
  163. void writeConsole(string text) {
  164.  
  165.     int indexBeginWord = 0;
  166.     text = MinWordLen(text, indexBeginWord);
  167.     cout << "Самое короткое слово в строке:\n" << text << "\n";
  168.     cout << "Позиция, с которой оно начинается:\n" << indexBeginWord << "\n";
  169. }
  170.  
  171. //изменить запись в файл
  172. void writeFile(string text) {
  173.     string path;
  174.     bool isIncorrect;
  175.     do {
  176.         isIncorrect = true;
  177.         path = readPath();
  178.         ofstream fout(path);
  179.         if (!fout.is_open()) {
  180.             cout << "Ошибка. Файл закрыт для записи. ";
  181.             isIncorrect = false;
  182.         }
  183.         else {
  184.  
  185.             int indexBeginWord = 0;
  186.             text = MinWordLen(text, indexBeginWord);
  187.             fout << "Самое короткое слово в строке:\n" << text << "\n";
  188.             fout << "Позиция, с которой оно начинается:\n" << indexBeginWord << "\n";
  189.             cout << "Информация успешно записана в файл.";
  190.         }
  191.         fout.close();
  192.     } while (!isIncorrect);
  193. }
  194.  
  195. void chooseOutput(string text) {
  196.     string option;
  197.     cout << "Выберите способ вывода результата.\n" <<
  198.         "Введите 'console', если хотите вывести результат через консоль.\n" <<
  199.         "Введите 'file', если хотите передать результат в файл.\n";
  200.     option = chooseAction();
  201.     if (option == "console")
  202.         writeConsole(text);
  203.     else
  204.         writeFile(text);
  205. }
  206.  
  207. int main() {
  208.  
  209.     system("chcp 1251");
  210.     string text;
  211.     printInfo();
  212.     text = chooseInput();
  213.     chooseOutput(text);
  214. }
  215.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement