Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <fstream>
- #include <string>
- #include <iostream>
- using namespace std;
- bool checkPermissionForWriting(const string& PathToFile) {
- bool Flag;
- ofstream file_out(PathToFile);
- if (file_out.is_open()) {
- file_out.close();
- Flag = true;
- }
- else {
- std::cout << "Файл закрыт для записи!\n";
- Flag = false;
- }
- return Flag;
- }
- int findPlusOrMinus(const string Text) {
- const char PLUS = '+';
- const char MINUS = '-';
- int Index = -1;
- bool IsCorrect;
- IsCorrect = true;
- int Length = Text.length();
- for (int i = 0; (i < Length && IsCorrect); i++) {
- if (Text[i] == PLUS || Text[i] == MINUS) {
- Index = i;
- IsCorrect = false;
- }
- }
- return Index;
- }
- int inputNumber(const int MIN_NUMBER, const int MAX_NUMBER) {
- bool isIncorrect;
- int number;
- string input = "";
- do {
- getline(cin, input);
- isIncorrect = false;
- try {
- number = stoi(input);
- }
- catch (invalid_argument ex) {
- cout << "Нужно ввести целое число.\n";
- isIncorrect = true;
- }
- catch (out_of_range ex) {
- cout << "Нужно ввести число, которое не меньше " << MIN_NUMBER << " и не больше "
- << MAX_NUMBER << "\n";
- isIncorrect = true;
- }
- if (!isIncorrect && (number < MIN_NUMBER || number > MAX_NUMBER)) {
- cout << "Нужно ввести число, которое не меньше " << MIN_NUMBER << " и не больше "
- << MAX_NUMBER << "\n";
- isIncorrect = true;
- }
- } while (isIncorrect);
- return number;
- }
- int chooseWayOfInputOrOuput() {
- const int CONSOLE_INPUT = 1;
- const int FILE_INPUT = 2;
- int UserWay;
- do {
- UserWay = inputNumber(1, 2);
- } while (UserWay != CONSOLE_INPUT && UserWay != FILE_INPUT);
- return UserWay;
- }
- const string receiveTextFromFile(const string Path)
- {
- string Text;
- ifstream InputFile(Path);
- getline(InputFile, Text);
- InputFile.close();
- return Text;
- }
- string receiveTextFromConsole() {
- cout << "Введите строку:\n";
- string Text;
- getline(cin, Text);
- return Text;
- }
- void printResultInConsole(const string ResultNumber){
- cout << "Полученное число: " << ResultNumber;
- }
- bool checkPermissionForReading(const string& PathToFile) {
- bool Flag;
- ifstream file_out(PathToFile);
- if (file_out.is_open()) {
- file_out.close();
- Flag = true;
- }
- else {
- std::cout << "Файл закрыт для чтения!\n";
- Flag = false;
- }
- return Flag;
- }
- bool checkExtension(const string& PathToFile) {
- const string extension = "txt";
- bool Flag;
- if (PathToFile.substr(PathToFile.length() - 3) == extension) {
- Flag = true;
- }
- else {
- cout << "Неверное расширение!\n";
- Flag = false;
- }
- return Flag;
- }
- const string inputPathToFileForReading() {
- string PathToFile;
- do {
- cout << "Введите путь к файлу для чтения: \n";
- getline(cin, PathToFile);
- } while (!checkExtension(PathToFile) || !checkPermissionForReading(PathToFile));
- return PathToFile;
- }
- bool checkReceivedText(string Text) {
- bool IsCorrect = true;
- int Length = Text.length();
- int Index = findPlusOrMinus(Text);
- bool IsStringCorrect;
- if (Index == -1)
- IsStringCorrect = false;
- else {
- IsStringCorrect = true;
- for (Index; (Index < Length && IsCorrect); Index++) {
- if (Text[Index] > 47 && Text[Index] < 58) {
- IsCorrect = false;
- IsStringCorrect = true;
- }
- else
- IsStringCorrect = false;
- }
- }
- return IsStringCorrect;
- }
- string receiveText()
- {
- string Path;
- string Text;
- cout << "Выберите способ ввода: \nНажмите '1', если хотите ввести строку из консоли.\nНажмите '2', если хотите считать строку из файла.\n";
- int UserWay;
- UserWay = chooseWayOfInputOrOuput();
- bool IsIncorrect;
- IsIncorrect = false;
- do {
- switch (UserWay)
- {
- case 1:
- {
- Text = receiveTextFromConsole();
- break;
- }
- case 2:
- {
- do {
- Path = inputPathToFileForReading();
- IsIncorrect = checkPermissionForReading(Path);
- } while (!IsIncorrect);
- Text = receiveTextFromFile(Path);
- break;
- }
- }
- IsIncorrect = checkReceivedText(Text);
- if (!IsIncorrect)
- cout << "В строке нет знака или следующей за ним цифры.\n";
- } while (!IsIncorrect);
- return Text;
- }
- string receiveNumber(const string Text) {
- string ResultNumber;
- int Length;
- Length = Text.length();
- int Index;
- Index = findPlusOrMinus(Text);
- ResultNumber = Text[Index];
- for (Index++; Index < Length; Index++) {
- try {
- stoi(Text.substr(Index, 1));
- ResultNumber += Text.substr(Index, 1);
- }
- catch (invalid_argument) {}
- }
- return ResultNumber;
- }
- void printResultInFile(string Path, string ResultNumber)
- {
- ofstream fout(Path, ios::trunc);
- fout << "Полученное число:" << ResultNumber;
- fout.close();
- }
- const string inputPathToFileForWriting() {
- string PathToFile;
- do {
- cout << "Введите путь к файлу для записи: \n";
- getline(cin, PathToFile);
- } while (!checkExtension(PathToFile) || !checkPermissionForWriting(PathToFile));
- return PathToFile;
- }
- void printResult(string ResultNumber){
- cout << "Выберите способ вывода: \nНажмите '1', если хотите вывести число в консоль.\nНажмите '2', если хотите записать строку в файл.\n";
- string PathToFile;
- int UserWay;
- UserWay = chooseWayOfInputOrOuput();
- bool IsIncorrect;
- IsIncorrect = false;
- switch (UserWay)
- {
- case 1:
- {
- printResultInConsole(ResultNumber);
- break;
- }
- case 2:
- {
- do {
- PathToFile = inputPathToFileForWriting();
- IsIncorrect = checkPermissionForWriting(PathToFile);
- } while (!IsIncorrect);
- printResultInFile(PathToFile, ResultNumber);
- break;
- }
- }
- }
- int main(){
- setlocale(LC_ALL, "Russian");
- cout << "Программа выделяет из строки подстроку, которая соответствует целому числу, начинающемуся с ''+'' или ''-''.'\n";
- string Text, ResultNumber;
- Text = receiveText();
- ResultNumber = receiveNumber(Text);
- printResult(ResultNumber);
- cout << "\nПрограмма завершена";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement