Разработать программу на C++.
В произвольном тексте (взятом из файла), содержащем не более 10 строк, в каждой строке не более 80 символов (текст вывести на экран), найти и вывести на экран слова, которые входят в текст более одного раза. Выводимые слова упорядочить по убыванию количества вхождений слов в текст. Выведенную информацию продублировать в выходной текстовый файл, имя файла задаёт пользователь.
Ответы на вопрос
C++#include#include #include #include #include #include #include using namespace std;// Структура для хранения слова и количества его вхождений struct WordCount { string word; int count; };// Функция для удаления знаков препинания string clearWord(string word) { string result; for (char c : word) { if (isalpha(c)) result += tolower(c); }
return result; }// Функция сортировки по убыванию количества повторений bool compareWords(const WordCount& a, const WordCount& b) { return a.count > b.count; }int main() { string inputFileName; string outputFileName;
cout << "Введите имя входного файла: "; cin >> inputFileName;
cout << "Введите имя выходного файла: "; cin >> outputFileName;
ifstream inputFile(inputFileName);
if (!inputFile) { cout << "Ошибка открытия входного файла!" << endl; return 1; }
vector<string> text; string line;
cout << "\nИсходный текст:\n";
// Чтение текста (не более 10 строк) while (getline(inputFile, line) && text.size() < 10) { text.push_back(line); cout << line << endl; }
inputFile.close();
map<string, int> words;
// Подсчет количества слов for (string line : text) { string word = "";
for (char c : line) { if (c != ' ' && c != '\t') { word += c; } else { string clean = clearWord(word);
if (!clean.empty()) words[clean]++;
word = ""; } }
// Обработка последнего слова в строке string clean = clearWord(word); if (!clean.empty()) words[clean]++; }
vector<WordCount> repeatedWords;
// Выбор слов, которые встречаются более одного раза for (auto pair : words) { if (pair.second > 1) { repeatedWords.push_back({ pair.first, pair.second }); } }
// Сортировка sort(repeatedWords.begin(), repeatedWords.end(), compareWords);
ofstream outputFile(outputFileName);
if (!outputFile) { cout << "Ошибка создания выходного файла!" << endl; return 1; }
cout << "\nСлова, встречающиеся более одного раза:\n";
outputFile << "Слова, встречающиеся более одного раза:\n";
for (WordCount item : repeatedWords) { cout << item.word << " - " << item.count << " раз(а)" << endl;
outputFile << item.word << " - " << item.count << " раз(а)" << endl; }
outputFile.close();
return 0; }
Объяснение программы
-
Пользователь вводит имя файла, в котором находится исходный текст, и имя выходного файла.
-
Программа считывает текст из файла. Ограничение соблюдается: максимум 10 строк.
-
Каждая строка выводится на экран.
-
Текст разбивается на отдельные слова.
-
Для каждого слова:
-
удаляются знаки препинания;
-
все буквы переводятся в нижний регистр, чтобы слова «Дом» и «дом» считались одинаковыми;
-
подсчитывается количество вхождений.
-
-
Из всех слов выбираются только те, которые встречаются больше одного раза.
-
Полученный список сортируется по убыванию количества повторений.
-
Результат выводится:
-
на экран;
-
одновременно записывается в указанный пользователем выходной текстовый файл.
-
Пример работы:
Исходный текст:
Дом стоит у реки. Красивый дом около реки. Дом большой.
Результат:
дом - 3 раза реки - 2 раза
Этот же результат будет сохранен в выходном файле.
Похожие вопросы
Топ вопросов за вчера в категории Информатика
Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili

