Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <sstream>
- #include <vector>
- #include <set>
- using namespace std;
- static string getStrFromKeyboard() {
- bool incorrect = true;
- string input;
- do {
- cout << "Введите строку символов :\n";
- cin >> input;
- if (input.length() == 0) {
- cout << "Ошибка! Вы ввели пустую строку! Попробуйте еще раз.\n";
- }
- else {
- incorrect = false;
- }
- } while (incorrect);
- return (input);
- }
- static string getStrFromFile() {
- string fileName;
- bool incorrect = true;
- string input = "";
- do {
- cout << "Введите имя файла, из которого желаете ввести строку символов :\n";
- cin >> fileName;
- fileName += ".txt";
- ifstream inputFile(fileName);
- if (inputFile.is_open()) {
- getline(inputFile, input);
- incorrect = false;
- if (input.size() == 0) {
- cout << "Данный файл пуст!\n";
- incorrect = true;
- }
- inputFile.close();
- }
- else {
- cout << "Файл " << fileName << " не найден!\n";
- }
- } while (incorrect);
- cout << "Введенная последовательность : " << input;
- return (input);
- }
- static void outputToConsole(vector<string> resultArr) {
- int counter = 0;
- cout << "Результат :\n";
- if (resultArr.size() == 0) {
- cout << ("Во введенной строке не содержится ни одного целого числа.\n");
- }
- else {
- for (int i = 0; i < resultArr.size(); i++) {
- if ((resultArr[i] != "+") && (resultArr[i] != "-")) {
- cout << resultArr[i] << "\n";
- }
- else {
- counter++;
- }
- }
- if (counter == resultArr.size()) {
- cout << ("Во введенной строке не содержится ни одного целого числа.\n");
- }
- }
- }
- static void outputToFile(vector<string> resultArr) {
- bool incorrect = true;
- string fileName;
- int counter = 0;
- ofstream outputFile;
- do {
- cout << "Введите имя текстового (.txt) файла," <<
- " в который вы хотите вывести данные :\n";
- cin >> fileName;
- fileName += ".txt";
- ofstream outputFile(fileName);
- if (outputFile.is_open()) {
- cout << ("Результат : \n");
- if (resultArr.size() == 0) {
- cout << "Во введенной строке не содержится ни одного целого числа.\n";
- outputFile << "Во введенной строке не содержится ни одного целого числа.";
- }
- else {
- for (int i = 0; i < resultArr.size(); i++) {
- if ((resultArr[i] != "+") && (resultArr[i] != "-")) {
- cout << resultArr[i] << "\n";
- outputFile << resultArr[i];
- outputFile << "\n";
- }
- else {
- counter++;
- }
- }
- }
- incorrect = false;
- }
- else {
- cout << "Ошибка чтения файла! Введите другое имя файла.\n";
- }
- } while (incorrect);
- if (counter == resultArr.size()) {
- cout << "Во введенной строке не содержится ни одного целого числа.\n";
- outputFile << "Во введенной строке не содержится ни одного целого числа.";
- }
- outputFile.close();
- cout << "Результат успешно записан в файл " << fileName;
- }
- static vector<string> setResultArr(string input) {
- int counter = 0;
- for (int i = 0; i < input.size(); i++) {
- if ((input[i] == '+') || (input[i] == '-')) {
- counter++;
- }
- }
- vector<string> resultArr(counter);
- for (int i = 0; i < resultArr.size(); i++) {
- resultArr[i] = "";
- }
- return (resultArr);
- }
- static vector<string> getSubstrings(string input, vector<string> output) {
- set<char> digits;
- for (int i = 0; i < 10; i++) {
- string s = to_string(i);
- const char* pchar = s.c_str();
- digits.insert(*pchar);
- }
- int i = 0;
- int j = 0;
- while (i < input.size()) {
- if ((input[i] == '+') || (input[i] == '-')) {
- output[j] += input[i];
- i++;
- while (digits.find(input[i]) != digits.end()) {
- output[j] += input[i];
- i++;
- }
- j++;
- }
- else i++;
- }
- return (output);
- }
- static string getUserChoiceForInput() {
- bool incorrect;
- string input = "";
- int choice = 0;
- do {
- cout << "Если Вы желаете ввести строку вручную - введите 1.\n" <<
- "Если Вы желаете ввести строку из файла - введите 2.\n";
- cin >> choice;
- if (cin.fail())
- {
- cin.clear(ios::goodbit);
- cin.ignore(cin.rdbuf()->in_avail());
- }
- incorrect = false;
- switch (choice) {
- case (1):
- input = getStrFromKeyboard();
- break;
- case (2):
- input = getStrFromFile();
- break;
- default:
- cout << "Ошибка ввода! Введите 1 или 2.\n";
- incorrect = true;
- }
- } while (incorrect);
- return (input);
- }
- static void getUserChoiceForOutput(vector<string> resultArr) {
- bool incorrect;
- int choice = 0;
- do {
- cout << "Если Вы желаете вывести результат в консоль - введите 1.\n" <<
- "Если Вы желаете вывести результат в файл - введите 2.\n";
- incorrect = false;
- cin >> choice;
- if (cin.fail())
- {
- cin.clear(ios::goodbit);
- cin.ignore(cin.rdbuf()->in_avail());
- }
- switch (choice) {
- case (1):
- outputToConsole(resultArr);
- break;
- case (2):
- outputToFile(resultArr);
- break;
- default:
- cout << "Ошибка ввода! Введите 1 или 2.\n";
- incorrect = true;
- }
- } while (incorrect);
- }
- int main() {
- setlocale(LC_ALL, "russian");
- cout << "Данная программа из введенной строки символов " <<
- "выделяет подстроку, состоящую из цифр, соответствующую " <<
- "целому числу\n";
- vector<string> resultArr;
- string input = getUserChoiceForInput();
- resultArr = setResultArr(input);
- resultArr = getSubstrings(input, resultArr);
- getUserChoiceForOutput(resultArr);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement