Вопрос задан 24.09.2026 в 10:44. Предмет Информатика. Спрашивает Галяутдинова Рената.

Разработать программу на 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; }

Объяснение программы

  1. Пользователь вводит имя файла, в котором находится исходный текст, и имя выходного файла.

  2. Программа считывает текст из файла. Ограничение соблюдается: максимум 10 строк.

  3. Каждая строка выводится на экран.

  4. Текст разбивается на отдельные слова.

  5. Для каждого слова:

    • удаляются знаки препинания;

    • все буквы переводятся в нижний регистр, чтобы слова «Дом» и «дом» считались одинаковыми;

    • подсчитывается количество вхождений.

  6. Из всех слов выбираются только те, которые встречаются больше одного раза.

  7. Полученный список сортируется по убыванию количества повторений.

  8. Результат выводится:

    • на экран;

    • одновременно записывается в указанный пользователем выходной текстовый файл.

Пример работы:

Исходный текст:

Дом стоит у реки.
Красивый дом около реки.
Дом большой.

Результат:

дом - 3 раза
реки - 2 раза

Этот же результат будет сохранен в выходном файле.

Похожие вопросы

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос