
Разработать программу на C++. В произвольном тексте (взятом из файла), содержащем не более 10
строк, в каждой строке не более 80 символов (текст вывести на экран), найти и вывести на экран слова, которые входят в текст более одного раза. Выводимые слова упорядочить по убыванию количество вхождения слов в текст. Выведенную информацию продублировать в выходной текстовый файл, имя файла задает пользователь.

Ответы на вопрос

#include <iostream>
#include <vector>
#include <fstream>
using namespace std;
struct Word
{
string word;
int amount = 1;
};
int main()
{
ifstream input;
input.open("text.txt");
vector<Word> words;
while(!input.eof())
{
string str;
getline(input, str);
cout << str << "\n";
}
cout << "\n";
input.close();
input.open("text.txt");
while(!input.eof())
{
Word word;
input >> word.word;
words.push_back(word);
}
input.close();
string file;
ofstream create(file);
cout << "Input file name: ";
cin >> file;
cout << "\n";
create << file;
ofstream output(file);
for(int i = 0; i < words.size() - 1; i++)
for(int j = i + 1; j < words.size(); j ++)
if(words[i].word == words[j].word && words[i].word != "NULL")
{
words[i].amount++;
words[j] = {"NULL", -1};
}
for (int i = 0; i < words.size() - 1; i++)
for (int j = 0; j < words.size() - 1; j++)
if (words[j].amount < words[j + 1].amount)
swap(words[j], words[j + 1]);
for (int i = 0; i < words.size(); i++)
if(words[i].amount > 1)
{
cout << words[i].word << " ";
output << words[i].word << " ";
}
output.close();
return 0;
}




Для выполнения задачи по поиску и выводу слов, встречающихся более одного раза в тексте, и их упорядочиванию по убыванию количества вхождений, а также сохранению результата в выходной текстовый файл, вы можете использовать следующий C++ код:
cpp#include <iostream>
#include <fstream>
#include <sstream>
#include <map>
#include <vector>
#include <algorithm>
int main() {
std::string inputFileName, outputFileName;
std::cout << "Введите имя входного файла: ";
std::cin >> inputFileName;
std::cout << "Введите имя выходного файла: ";
std::cin >> outputFileName;
std::ifstream inputFile(inputFileName);
if (!inputFile.is_open()) {
std::cerr << "Не удалось открыть входной файл." << std::endl;
return 1;
}
std::map<std::string, int> wordCount; // Хранит количество вхождений каждого слова
std::string line;
while (std::getline(inputFile, line)) {
std::istringstream iss(line);
std::string word;
while (iss >> word) {
// Избавляемся от знаков препинания, чтобы слова "word." и "word" считались одним словом
word.erase(std::remove_if(word.begin(), word.end(), ::ispunct), word.end());
// Преобразуем слово в нижний регистр, чтобы учитывать его независимо от регистра
std::transform(word.begin(), word.end(), word.begin(), ::tolower);
wordCount[word]++;
}
}
inputFile.close();
std::vector<std::pair<std::string, int>> sortedWords;
for (const auto& entry : wordCount) {
if (entry.second > 1) {
sortedWords.push_back(entry);
}
}
// Сортируем слова по убыванию количества вхождений
std::sort(sortedWords.begin(), sortedWords.end(),
[](const std::pair<std::string, int>& a, const std::pair<std::string, int>& b) {
return a.second > b.second;
});
// Выводим отсортированные слова на экран
std::cout << "Слова, встречающиеся более одного раза в тексте:" << std::endl;
for (const auto& entry : sortedWords) {
std::cout << entry.first << ": " << entry.second << " раз(а)" << std::endl;
}
// Сохраняем результат в выходной файл
std::ofstream outputFile(outputFileName);
if (!outputFile.is_open()) {
std::cerr << "Не удалось открыть выходной файл." << std::endl;
return 1;
}
for (const auto& entry : sortedWords) {
outputFile << entry.first << ": " << entry.second << " раз(а)" << std::endl;
}
outputFile.close();
std::cout << "Результат сохранен в файл " << outputFileName << std::endl;
return 0;
}
Программа сначала запрашивает у пользователя имя входного и выходного файлов, затем считывает текст из входного файла, анализирует его и выводит на экран слова, встречающиеся более одного раза, упорядоченные по убыванию количества вхождений. Результат также сохраняется в указанный пользователем выходной файл.


Похожие вопросы
Топ вопросов за вчера в категории Информатика
Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili