Вопрос задан 07.06.2023 в 08:49. Предмет Информатика. Спрашивает Акмайкин Алексей.

СРОЧНО ЯЗЫК С++ ОСТАЛСЯ ЧАС ДАЮ 60 БАЛЛОВ Измени ширину параграфа Текст параграфа представляет

собой набор слов (последовательности символов с кодами от 33 до 127), разделенных ровно одним пробелом (символом с кодом 32). Ширина параграфа должна составлять не более M символов. Требуется получить разбиение этого текста на строки длиной не более чем M символов. Cлово переносится на следующую строку, только если в текущей строке его разместить уже невозможно. Новая строка не должна начинаться с пробела. Никакая строка не должна заканчиваться пробелом. Последняя строка должна заканчиваться переводом строки (он автоматически образуется при выполнении вызова print в Python без изменения параметра end, а также при выводе endl в поток вывода cout в С++). Формат входных данных На вход программе сначала подается число 0 . В следующей строке находится исходный текст. Длина слов в нем не превышает M, слова разделены ровно одним пробелом. В начале и в конце строки пробелы отсутствуют. Текст содержит как минимум один непробельный символ. Длина текста не превосходит 100000 символов. Формат выходных данных Выведите искомое разбиение текста на строки длиной не более M . Ввод Вывод 7 One, two and three. One, two and three.
0 0
Перейти к ответам

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

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

Для решения данной задачи можно использовать алгоритм переноса слов. Мы будем идти по строке, добавляя слова в текущую строку до тех пор, пока не превысим максимальную длину строки. Если при добавлении нового слова длина строки станет больше M, то мы переносим последнее добавленное слово на следующую строку.

Вот код на языке C++, который реализует данный алгоритм:

#include <iostream>

#include <string>

#include <vector>

using namespace std;

int main() {

   int M;

   cin >> M;

   string text;

   getline(cin >> ws, text); // считываем весь текст, пропуская первый ноль и пробельные символы

   vector<string> lines; // храним строки в векторе

   int start = 0; // начало текущего слова

   int end = 0; // конец текущей строки

   while (end < text.size()) {

       // ищем следующее слово

       start = end;

       while (start < text.size() && text[start] == ' ') start++;

       end = start;

       while (end < text.size() && text[end] != ' ') end++;

       // добавляем слово в текущую строку

       if (end - start + 1 <= M - (lines.empty() ? 0 : lines.back().size())) {

           if (!lines.empty()) lines.back() += ' ';

           lines.back() += text.substr(start, end - start);

       } else { // переносим слово на следующую строку

           lines.push_back(text.substr(start, end - start));

       }

   }

   // выводим результат

   for (const auto& line : lines) {

       cout << line << endl;

   }

   return 0;

}

Пример входных данных:

7

One, two and three.

Пример выходных данных:

One,  

two and  

three.

7

One,

two and

three.

One,  

two and  

three.

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

Привет! Я могу помочь тебе с этой задачей на C++. Вот пример решения:

cpp
#include <iostream> #include <string> void printParagraph(const std::string& text, int maxWidth) { int currentWidth = 0; std::string currentLine; for (char c : text) { if (c == ' ') { // Если текущая строка достигла максимальной ширины, // выводим ее и начинаем новую строку if (currentWidth >= maxWidth) { std::cout << currentLine << std::endl; currentLine.clear(); currentWidth = 0; } // Добавляем пробел к текущей строке currentLine += c; currentWidth++; } else { // Если текущая строка достигла максимальной ширины, // выводим ее и начинаем новую строку if (currentWidth >= maxWidth) { std::cout << currentLine << std::endl; currentLine.clear(); currentWidth = 0; } // Добавляем символ к текущей строке currentLine += c; currentWidth++; } } // Выводим последнюю строку if (!currentLine.empty()) { std::cout << currentLine << std::endl; } } int main() { int maxWidth; std::cin >> maxWidth; std::cin.ignore(); // Пропускаем символ новой строки после числа std::string text; std::getline(std::cin, text); printParagraph(text, maxWidth); return 0; }

Теперь ты можешь ввести число 7, а затем текст "One, two and three. One, two and three." в стандартный ввод программы, и она выведет разбиение текста на строки длиной не более 7 символов.

Надеюсь, это поможет! Если у тебя возникнут еще вопросы, не стесняйся задавать.

0 0

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

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

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