Вопрос задан 27.09.2023 в 19:31. Предмет Информатика. Спрашивает Кузнецова Мария.

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

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

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

Внимание! Ответы на вопросы дают живые люди. Они могут содержать ошибочную информацию, заблуждения, а также ответы могут быть сгенерированы нейросетями. Будьте внимательны. Если вы уверены, что ответ неверный, нажмите кнопку "Пожаловаться" под ответом.
Отвечает Куликова Кристина.

#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;

}


0 0
Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.

Для выполнения задачи по поиску и выводу слов, встречающихся более одного раза в тексте, и их упорядочиванию по убыванию количества вхождений, а также сохранению результата в выходной текстовый файл, вы можете использовать следующий 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; }

Программа сначала запрашивает у пользователя имя входного и выходного файлов, затем считывает текст из входного файла, анализирует его и выводит на экран слова, встречающиеся более одного раза, упорядоченные по убыванию количества вхождений. Результат также сохраняется в указанный пользователем выходной файл.

0 0

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

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

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

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