Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <fstream>
- using namespace std;
- void outputTask() {
- cout << "Данная программа записывает в массив встреченные в строке числа." << endl;
- }
- void chooseInput(bool& isFromFile) {
- bool isNotCorrect;
- int num;
- do {
- isNotCorrect = false;
- cout << "Выберите откуда вводить данные: 0, если из консоли, 1 если из файла:" << endl;
- cin >> num;
- if ((cin.fail()) or ((num != 0) and (num != 1))) {
- isNotCorrect = true;
- cout << "Ошибка ввода! Повторите попытку." << endl;
- cin.clear();
- while (cin.get() != '\n');
- }
- } while (isNotCorrect);
- isFromFile = (num == 1);
- }
- string choosePath() {
- string path;
- bool isNotCorrect;
- do {
- isNotCorrect = false;
- cout << "Введите путь к файлу для ввода информации:" << endl;
- cin >> path;
- ifstream fin(path);
- if ((!fin.is_open()) or (path.length() < 5)) {
- isNotCorrect = true;
- cout << "Ошибка ввода! Повторите попытку." << endl;
- }
- else {
- if (path[path.length() - 1] != 't' and path[path.length() - 2] != 'x' and path[path.length() - 3] != 't' and path[path.length() - 4] != '.') {
- isNotCorrect = true;
- cout << "Ошибка ввода! Повторите попытку." << endl;
- }
- }
- fin.close();
- } while (isNotCorrect);
- return path;
- }
- void inputFromConsole(string& str) {
- bool isNotCorrect;
- do {
- isNotCorrect = true;
- cout << "Введите строку:" << endl;
- getline(cin, str);
- for (int i = 0; i < str.length(); i++) {
- if (str[i] != ' ') {
- isNotCorrect = false;
- }
- }
- if (isNotCorrect or (str.length() < 1)) {
- cout << "Ошибка ввода! Повторите попытку." << endl;
- isNotCorrect = true;
- }
- } while (isNotCorrect);
- }
- void inputFromFile(string& str) {
- string path;
- bool isCorrect;
- cout << "При записи из файла учтите, что в файле нужные данные должны быть записаны на первой строке." << endl;
- isCorrect = false;
- path = choosePath();
- ifstream fin(path);
- getline(fin, str);
- for (int i = 0; i < str.length(); i++) {
- if (str[i] != ' ') {
- isCorrect = true;
- }
- }
- if (!isCorrect or (str.length() < 1)) {
- cout << "Ошибка ввода! Введите нужную строку с клавиатуры." << endl;
- inputFromConsole(str);
- }
- fin.close();
- }
- string inputString(bool isFromFile) {
- string str;
- if (isFromFile) {
- inputFromFile(str);
- }
- else {
- inputFromConsole(str);
- }
- return str;
- }
- string choosePathForOutput() {
- string path;
- bool isNotCorrect;
- do {
- isNotCorrect = false;
- cout << "Введите путь к файлу для вывода информации:" << endl;
- cin >> path;
- ofstream fout(path);
- if ((!fout.is_open()) or (path.length() < 5)) {
- isNotCorrect = true;
- cout << "Ошибка ввода! Повторите попытку." << endl;
- }
- else {
- if (path[path.length() - 1] != 't' and path[path.length() - 2] != 'x' and path[path.length() - 3] != 't' and path[path.length() - 4] != '.') {
- isNotCorrect = true;
- cout << "Ошибка ввода! Повторите попытку." << endl;
- }
- }
- fout.close();
- } while (isNotCorrect);
- return path;
- }
- void outputAnswerInFile(int* arr, int num) {
- string path;
- path = choosePathForOutput();
- ofstream fout(path);
- if (num == 0) {
- fout << "Цифры и числа не были встречены в строке!" << endl;
- }
- else {
- fout << "Числа, встреченные в заданной строке:";
- for (int i = 0; i < num; i++) {
- fout << arr[i] << " ";
- }
- }
- fout.close();
- cout << "Данные успешно записаны в файл!" << endl;
- }
- void outputAnswer(int* arr, int num) {
- if (num == 0) {
- cout << "Цифры и числа не были встречены в строке!" << endl;
- }
- else {
- cout << "Числа, встреченные в заданной строке:";
- for (int i = 0; i < num; i++) {
- cout << arr[i] << " ";
- }
- }
- outputAnswerInFile(arr, num);
- }
- int countAmountOfNumbers(string str) {
- int i;
- int num;
- int j;
- i = 1;
- num = 0;
- while (i < str.length()) {
- j = 0;
- if ((str[i] >= '0') && (str[i] <= '9')) {
- num++;
- j = i + 1;
- while ((str[j] >= '0') && (str[j] <= '9')) {
- j++;
- }
- i = j;
- }
- else {
- i++;
- }
- }
- return num;
- }
- int* addNumbersInArray(int amount, string str) {
- int* arr = new int[amount];
- int i, j, index, number, multiplier;
- i = 0;
- index = -1;
- while (i < str.length()) {
- number = 0;
- j = 0;
- if ((str[i] >= '0') && (str[i] <= '9')) {
- index++;
- j = i + 1;
- number = str[i] - '0';
- multiplier = 10;
- while ((str[j] >= '0') && (str[j] <= '9')) {
- number = number * 10 + str[j] - '0';
- j++;
- multiplier = multiplier * 10;
- }
- arr[index] = number;
- i = j;
- }
- else {
- i++;
- }
- }
- return arr;
- }
- int main() {
- setlocale(LC_ALL, "Rus");
- system("chcp 1251");
- bool isFromFile;
- string str;
- int amount;
- int* numbers;
- outputTask();
- chooseInput(isFromFile);
- str = inputString(isFromFile);
- amount = countAmountOfNumbers(str);
- numbers = addNumbersInArray(amount, str);
- outputAnswer(numbers, amount);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement