Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <windows.h>
- #include <string>
- using namespace std;
- string SubString(string s, int begin, int end)
- {
- string res = "";
- for (int i = begin; i < end; i++)
- {
- res += s[i];
- }
- return res;
- }
- string MinWordLen(string s, int& indexBegin)
- {
- string minWord = s;//если слово одно, оно сразу же будет равно строке
- string word = "";
- int index = 0;
- bool checkPr;
- for (int i = 0; i < s.length(); i++)
- {
- checkPr = false;
- if (s[i] == ' ')
- {
- checkPr = true;
- word = SubString(s, index, i);
- }
- if (i == s.length() - 1)
- {
- word = SubString(s, index, i + 1);
- }
- if (minWord.length() > word.length() && word.length() != 0)
- {
- indexBegin = index;
- minWord = word;
- }
- if (checkPr)
- {
- index = i + 1;
- }
- }
- return minWord;
- }
- void printInfo() {
- cout << "Программа находит самое короткое слово в предложении и выводит позицию, с которой оно начинается\n";
- }
- string input(bool& isIncorrect) {
- string str;
- getline(cin, str);
- if (str.empty()) {
- isIncorrect = true;
- cerr << "Ошибка. Строка не может быть пустой.\n";
- }
- return str;
- }
- string readTextFromConsole() {
- string text;
- bool isIncorrect;
- do {
- isIncorrect = false;
- cout << "Введите строку:\n";
- text = input(isIncorrect);
- } while (isIncorrect);
- return text;
- }
- bool checkExtension(string path) {
- return SubString(path, path.length() - 4, path.length()) == ".txt";
- }
- string readPath() {
- ifstream fin;
- string path;
- bool isIncorrect;
- cout << "Введите путь к файлу:\n";
- do {
- isIncorrect = false;
- cin >> path;
- fin.open(path);
- if (!fin.is_open() || fin.fail()) {
- isIncorrect = true;
- cout << "Файл недоступен. Повторите ввод:\n";
- }
- else if (!checkExtension(path)) {
- isIncorrect = true;
- cout << "Неправильное расширение файла. Повторите ввод:\n";
- }
- fin.close();
- while (cin.get() != '\n');
- } while (isIncorrect);
- return path;
- }
- string readTextFromFile(ifstream& fin) {
- string text;
- getline(fin, text);
- if (text.empty()) {
- cout << "Ошибка. Файл пуст. ";
- }
- return text;
- }
- string readFile() {
- string path, text;
- int indexBeginWord;
- path = readPath();
- ifstream fin(path);
- text = readTextFromFile(fin);
- fin.close();
- return text;
- }
- string chooseAction() {
- string input;
- bool isIncorrect;
- do {
- isIncorrect = false;
- cin >> input;
- if ((input != "console") && (input != "file")) {
- isIncorrect = true;
- cout << "Ошибка. Введите 'console' или 'file':\n";
- }
- } while (isIncorrect);
- return input;
- }
- string chooseInput() {
- string option, text;
- cout << "Выберите способ ввода данных.\n" <<
- "Введите 'console', если хотите ввести данные через консоль.\n" <<
- "Введите 'file', если хотите передать данные из файла.\n";
- option = chooseAction();
- while (cin.get() != '\n');
- if (option == "console") {
- text = readTextFromConsole();
- }
- else
- text = readFile();
- return text;
- }
- void writeConsole(string text) {
- int indexBeginWord = 0;
- text = MinWordLen(text, indexBeginWord);
- cout << "Самое короткое слово в строке:\n" << text << "\n";
- cout << "Позиция, с которой оно начинается:\n" << indexBeginWord << "\n";
- }
- //изменить запись в файл
- void writeFile(string text) {
- string path;
- bool isIncorrect;
- do {
- isIncorrect = true;
- path = readPath();
- ofstream fout(path);
- if (!fout.is_open()) {
- cout << "Ошибка. Файл закрыт для записи. ";
- isIncorrect = false;
- }
- else {
- int indexBeginWord = 0;
- text = MinWordLen(text, indexBeginWord);
- fout << "Самое короткое слово в строке:\n" << text << "\n";
- fout << "Позиция, с которой оно начинается:\n" << indexBeginWord << "\n";
- cout << "Информация успешно записана в файл.";
- }
- fout.close();
- } while (!isIncorrect);
- }
- void chooseOutput(string text) {
- string option;
- cout << "Выберите способ вывода результата.\n" <<
- "Введите 'console', если хотите вывести результат через консоль.\n" <<
- "Введите 'file', если хотите передать результат в файл.\n";
- option = chooseAction();
- if (option == "console")
- writeConsole(text);
- else
- writeFile(text);
- }
- int main() {
- system("chcp 1251");
- string text;
- printInfo();
- text = chooseInput();
- chooseOutput(text);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement