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 num, string str) {
- string path;
- path = choosePathForOutput();
- ofstream fout(path);
- fout << "Количество слов в заданной строке: " << num << endl;
- fout << "Самое длинное слово среди заданных: " << str << endl;
- fout.close();
- cout << "Данные успешно записаны в файл!" << endl;
- }
- void outputAnswer(int num, string str) {
- cout << "Количество слов в заданной строке: " << num << endl;
- cout << "Самое длинное слово среди заданных: " << str << endl;
- outputAnswerInFile(num, str);
- }
- int countAmountOfWords(string str) {
- int amount;
- string word;
- amount = 0;
- word = "";
- for (int i = 0; i < str.length(); i++) {
- if (str[i] != ' ') {
- word = word + str[i];
- }
- else {
- if (word.length() > 0){
- amount++;
- }
- word = "";
- }
- }
- if (str[str.length() - 1] != ' ') {
- amount++;
- }
- return amount;
- }
- string findForLongestString(string str, int num) {
- string* words;
- int numOfWord;
- string word;
- string longestWord;
- numOfWord = 0;
- word = "";
- words = new string[num];
- for (int i = 0; i < str.length(); i++) {
- if (str[i] != ' ') {
- word = word + str[i];
- }
- else {
- if (word.length() > 0) {
- words[numOfWord] = word;
- numOfWord++;
- }
- word = "";
- }
- }
- longestWord = "";
- for (int i = 0; i < num; i++) {
- if (words[i].length() > longestWord.length()) {
- longestWord = words[i];
- }
- }
- return longestWord;
- }
- int main() {
- setlocale(LC_ALL, "Rus");
- system("chcp 1251");
- bool isFromFile;
- string str;
- string longestStr;
- int amount;
- outputTask();
- chooseInput(isFromFile);
- str = inputString(isFromFile);
- amount = countAmountOfWords(str);
- longestStr = findForLongestString(str, amount);
- outputAnswer(amount, longestStr);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement