Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 11.11.2019
Сообщений: 18

Форматирование текста : исправьте код

11.11.2019, 19:10. Показов 1493. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем! Задача "Форматирование текста" звучит так:
Многие системы форматирования текста, например TEX или Wiki, используют для разбиения текста на абзацы пустые строки. Текст представляет собой последовательность слов, разделенных пробелами, символами перевода строк и следующими знаками препинания: «,», «.», «?», «!», «-», «:» и «’» (ASCII коды 44, 46, 63, 33, 45, 58, 39). Каждое слово в тексте состоит из заглавных и прописных букв английского алфавита и цифр. Текст может состоять из нескольких абзацев. В этом случае соседние абзацы разделяются одной или несколькими пустыми строками. Перед первым абзацем и после последнего абзаца также могут идти одна или несколько пустых строк.

Дальнейшее использование исходного текста предполагает его форматирование, которое осуществляется следующим образом. Каждый абзац должен быть разбит на строки, каждая из которых имеет длину не больше w. Первая строка каждого абзаца должна начинаться с отступа, состоящего из b пробелов. Слова внутри одной строки должны быть разделены ровно одним пробелом. Если после слова идет один или несколько знаков препинания, они должны следовать сразу после слова без дополнительных пробелов. Если очередное слово вместе со следующими за ним знаками препинания помещается на текущую строку, оно размещается на текущей строке. В противном случае, с этого слова начинается новая строка. В отформатированном тексте абзацы не должны разделяться пустыми строками. В конце строк не должно быть пробелов.

Требуется написать программу, которая по заданным числам w и b и заданному тексту выводит текст, отформатированный описанным выше образом.

Входные данные
Первая строка входного файла INPUT.TXT содержит два целых числа: w и b (5 ≤ w ≤ 100, 1 ≤ b ≤ 8, b < w). Затем следует одна или более строк, содержащих заданный текст. Длина слова в тексте вместе со следующими за ними знаками препинания не превышает w, а длина первого слова любого абзаца вместе со следующими за ним знаками препинания не превышает (w – b). Текст содержит хотя бы одну букву. Перед первой буквой каждого абзаца знаков препинания нет.

Выходные данные
Выходной файл OUTPUT.TXT должен содержать заданный текст, отформатированный в соответствии с приведенными в условии задачи правилами. Размер входного файла не превышает 100 Кбайт. Длина каждой строки во входном файле не превышает 250.
Мой код ниже:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include <stdio.h>
#include <string>
#include <vector>
#include <cassert>
std::vector<std::string> ParagraphToWords(const std::vector<char> &text) {
    std::vector<std::string> words;
    bool newWord = true;
    for (char c : text) {
        if (('0' <= c && c <= '9') || ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z')) {
            if (newWord) {
                words.push_back("");
                newWord = false;
            }
            words.back().push_back(c);
        } else if (c == ' ' || c == '\n') {
            newWord = true;
        } else {
            assert(c == ',' || c == '.' || c == '?' || c == '!' || c == '-' || c == ':' || c == '\'');
            assert(!words.empty());
            words.back().push_back(c);
            newWord  = true;
        }
    }
    return words;
}
void printParagraph(const std::vector<std::string> &words, const int maxlen, const int indent)
{
    assert(!words.empty());
    for (int i = 0; i < indent; i++) {
        putchar(' ');
    }
    printf("%s", words[0].c_str());
    int lineLen = indent + (int)words.size();
    assert(lineLen <= maxlen);
    for (int i = 1; i < (int)words.size(); i++) {
        if (lineLen + 1 + (int)words[i].size() <= maxlen) {
            printf(" %s", words[i].c_str());
            lineLen += 1 + (int)words[i].size();
        } else {
            printf("\n%s", words[i].c_str());
            lineLen = (int)words[i].size();
        }
        assert(lineLen <= maxlen);
    }
    putchar('\n');
}
 
int main() {
    int maxlen, indent;
    scanf("%d %d", &maxlen, &indent);
    std::vector<char> text;
    while(true) {
        int c = getchar();
        if (c == EOF) {
            break;
        }
        text.push_back((char)c);
    }
    int start = 0;
    while(start < (int)text.size() && text[start] == '\n') {
        start++;
    }
    text.erase(text.begin(), text.begin() + start);
    if (text.empty()) {
        return 0;
    }
    while(text.back() == '\n') {
        text.pop_back();
    }
     std::vector<std::vector<char>> paragraphs(1);
    paragraphs.back().push_back(text[0]);
    for (int i = 1; i < (int)text.size(); i++) {
        if (text[i] == '\n' && text[i - 1] == '\n') {
            if (!paragraphs.back().empty()) {
                paragraphs.push_back(std::vector<char>());
            }
        } else {
            paragraphs.back().push_back(text[i]);
        }
    }
    assert(!paragraphs.back().empty());
    for (auto paragraph : paragraphs) {
        printParagraph(ParagraphToWords(paragraph));
    }
 
    return 0;
}
Помогите исправить, пожалуйста.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.11.2019, 19:10
Ответы с готовыми решениями:

исправьте код пожалуйста!!!
Дан целочисленный массив размерностью N. Определить, является ли он экстремальным. Например, массивы { 2, 5, 14, 8, 4, 2} и { 23, 11, 6, 18...

Форматирование текста
Подскажите пожалуйста как можно отформатировать текст перед выводом его на экран.

Форматирование текста в RichViewEdit
Здравствуйте, очень нужна ваша помощь. Есть компонент RichViewEdit, нужно форматировать текст в...

2
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
11.11.2019, 21:49
Цитата Сообщение от vas4ik29 Посмотреть сообщение
Помогите исправить, пожалуйста.
Исправить что? Ты сам-то можешь прочитать этот код? Воспользуйся для начала кнопкой С++
0
0 / 0 / 0
Регистрация: 11.11.2019
Сообщений: 18
12.11.2019, 21:24  [ТС]
я как бы его сам написал и понимаю...
А если про код, там выдает что у функции printParagraph в самом конце мало аргументов, но в ней самой я использую все 3 аргумента, вопрос что надо написать в конце, где вывод с помощью этой функции.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.11.2019, 21:24
Помогаю со студенческими работами здесь

Форматирование текста как код
Всем привет. Гугл в данном случае не помогает, т.к. при таком запросе находится все то, что мне не нужно =) У меня есть сайт на joomla....

Форматирование текста под компьютерный код
Полюбился мне этот раздел :) В общем, проблема в следующем. Пусть дан такой текст: Это пример исходного текста на С++....

RichEdit или RTF форматирование текста, а лучше HTML форматирование
Привет формучани. Подскажите бесплатный компонент который позволил бы выводить текст в формате RTF или HTML. Очень хорошо подходит TMS...

Форматирование текста и изменение цвета текста в консоли
Подскажите пожалуйста, как форматировать текст в консоли, а также как менять его цвет

Исправьте код
#include &lt;cstdlib&gt; #include &lt;iostream&gt; #include &lt;stdio.h&gt; #include &lt;math.h&gt; using namespace std; int main(void) { string...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru