Advertisement
Guest User

Untitled

a guest
Nov 18th, 2019
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.13 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <sstream>
  4. #include <vector>
  5. #include <set>
  6. using namespace std;
  7.  
  8. static string getStrFromKeyboard() {
  9.     bool incorrect = true;
  10.     string input;
  11.     do {
  12.         cout << "Введите строку символов :\n";
  13.         cin >> input;
  14.         if (input.length() == 0) {
  15.             cout << "Ошибка! Вы ввели пустую строку! Попробуйте еще раз.\n";
  16.         }
  17.         else {
  18.             incorrect = false;
  19.         }
  20.     } while (incorrect);
  21.     return (input);
  22. }
  23.  
  24. static string getStrFromFile() {
  25.     string fileName;
  26.     bool incorrect = true;
  27.     string input = "";
  28.     do {
  29.         cout << "Введите имя файла, из которого желаете ввести строку символов :\n";
  30.         cin >> fileName;
  31.         fileName += ".txt";
  32.         ifstream inputFile(fileName);
  33.         if (inputFile.is_open()) {
  34.             getline(inputFile, input);
  35.             incorrect = false;
  36.             if (input.size() == 0) {
  37.                 cout << "Данный файл пуст!\n";
  38.                 incorrect = true;
  39.             }
  40.             inputFile.close();
  41.         }
  42.         else {
  43.             cout << "Файл " << fileName << " не найден!\n";
  44.         }
  45.     } while (incorrect);
  46.     cout << "Введенная последовательность : " << input;
  47.     return (input);
  48. }
  49.  
  50. static void outputToConsole(vector<string> resultArr) {
  51.     int counter = 0;
  52.     cout << "Результат :\n";
  53.     if (resultArr.size() == 0) {
  54.         cout << ("Во введенной строке не содержится ни одного целого числа.\n");
  55.     }
  56.     else {
  57.         for (int i = 0; i < resultArr.size(); i++) {
  58.             if ((resultArr[i] != "+") && (resultArr[i] != "-")) {
  59.                 cout << resultArr[i] << "\n";
  60.             }
  61.             else {
  62.                 counter++;
  63.             }
  64.         }
  65.         if (counter == resultArr.size()) {
  66.             cout << ("Во введенной строке не содержится ни одного целого числа.\n");
  67.         }
  68.     }
  69. }
  70.  
  71. static void outputToFile(vector<string> resultArr) {
  72.     bool incorrect = true;
  73.     string fileName;
  74.     int counter = 0;
  75.     ofstream outputFile;
  76.     do {
  77.         cout << "Введите имя текстового (.txt) файла," <<
  78.             " в который вы хотите вывести данные :\n";
  79.         cin >> fileName;
  80.         fileName += ".txt";
  81.         ofstream outputFile(fileName);
  82.         if (outputFile.is_open()) {
  83.             cout << ("Результат : \n");
  84.             if (resultArr.size() == 0) {
  85.                 cout << "Во введенной строке не содержится ни одного целого числа.\n";
  86.                 outputFile << "Во введенной строке не содержится ни одного целого числа.";
  87.             }
  88.             else {
  89.                 for (int i = 0; i < resultArr.size(); i++) {
  90.                     if ((resultArr[i] != "+") && (resultArr[i] != "-")) {
  91.                         cout << resultArr[i] << "\n";
  92.                         outputFile << resultArr[i];
  93.                         outputFile << "\n";
  94.                     }
  95.                     else {
  96.                         counter++;
  97.                     }
  98.                 }
  99.             }
  100.             incorrect = false;
  101.         }
  102.         else {
  103.             cout << "Ошибка чтения файла! Введите другое имя файла.\n";
  104.         }
  105.     } while (incorrect);
  106.     if (counter == resultArr.size()) {
  107.         cout << "Во введенной строке не содержится ни одного целого числа.\n";
  108.         outputFile << "Во введенной строке не содержится ни одного целого числа.";
  109.     }
  110.     outputFile.close();
  111.     cout << "Результат успешно записан в файл " << fileName;
  112. }
  113.  
  114. static vector<string> setResultArr(string input) {
  115.     int counter = 0;
  116.     for (int i = 0; i < input.size(); i++) {
  117.         if ((input[i] == '+') || (input[i] == '-')) {
  118.             counter++;
  119.         }
  120.     }
  121.     vector<string> resultArr(counter);
  122.     for (int i = 0; i < resultArr.size(); i++) {
  123.         resultArr[i] = "";
  124.     }
  125.     return (resultArr);
  126. }
  127.  
  128. static vector<string> getSubstrings(string input, vector<string> output) {
  129.     set<char> digits;
  130.     for (int i = 0; i < 10; i++) {
  131.         string s = to_string(i);
  132.         const char* pchar = s.c_str();
  133.         digits.insert(*pchar);
  134.     }
  135.     int i = 0;
  136.     int j = 0;
  137.     while (i < input.size()) {
  138.         if ((input[i] == '+') || (input[i] == '-')) {
  139.             output[j] += input[i];
  140.             i++;
  141.             while (digits.find(input[i]) != digits.end()) {
  142.                 output[j] += input[i];
  143.                 i++;
  144.             }
  145.             j++;
  146.         }
  147.         else i++;
  148.     }
  149.     return (output);
  150. }
  151.  
  152. static string getUserChoiceForInput() {
  153.     bool incorrect;
  154.     string input = "";
  155.     int choice = 0;
  156.     do {
  157.         cout << "Если Вы желаете ввести строку вручную - введите 1.\n" <<
  158.             "Если Вы желаете ввести строку из файла - введите 2.\n";
  159.         cin >> choice;
  160.         if (cin.fail())
  161.         {
  162.             cin.clear(ios::goodbit);
  163.             cin.ignore(cin.rdbuf()->in_avail());
  164.         }
  165.         incorrect = false;
  166.         switch (choice) {
  167.         case (1):
  168.             input = getStrFromKeyboard();
  169.             break;
  170.         case (2):
  171.             input = getStrFromFile();
  172.             break;
  173.         default:
  174.             cout << "Ошибка ввода! Введите 1 или 2.\n";
  175.             incorrect = true;
  176.         }
  177.     } while (incorrect);
  178.     return (input);
  179. }
  180.  
  181. static void getUserChoiceForOutput(vector<string> resultArr) {
  182.     bool incorrect;
  183.     int choice = 0;
  184.     do {
  185.         cout << "Если Вы желаете вывести результат в консоль - введите 1.\n" <<
  186.             "Если Вы желаете вывести результат в файл - введите 2.\n";
  187.         incorrect = false;
  188.         cin >> choice;
  189.         if (cin.fail())
  190.         {
  191.             cin.clear(ios::goodbit);
  192.             cin.ignore(cin.rdbuf()->in_avail());
  193.         }
  194.         switch (choice) {
  195.         case (1):
  196.             outputToConsole(resultArr);
  197.             break;
  198.         case (2):
  199.             outputToFile(resultArr);
  200.             break;
  201.         default:
  202.             cout << "Ошибка ввода! Введите 1 или 2.\n";
  203.             incorrect = true;
  204.         }
  205.     } while (incorrect);
  206. }
  207.  
  208. int main() {
  209.     setlocale(LC_ALL, "russian");
  210.     cout << "Данная программа из введенной строки символов " <<
  211.         "выделяет подстроку, состоящую из цифр, соответствующую " <<
  212.         "целому числу\n";
  213.     vector<string> resultArr;
  214.     string input = getUserChoiceForInput();
  215.     resultArr = setResultArr(input);
  216.     resultArr = getSubstrings(input, resultArr);
  217.     getUserChoiceForOutput(resultArr);
  218. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement