Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
even_murmansk
0 / 0 / 0
Регистрация: 01.04.2016
Сообщений: 1
#1

Форматирование текста - C++

01.04.2016, 14:31. Просмотров 419. Ответов 0
Метки нет (Все метки)

Дается абзац текста, состоящий из ряда слов, отделенных друг от друга пробелами и/или символами новой строки (символы табуляции не применяются). Слово может содержать знаки пунктуации. Текст завершается специальным словом "$$$", которое будет единственным на последней строке.

Например, в тексте

The quick brown-fox jump$
over, the --- lazy
dog.
$$$
словами являются "The", "quick", "brown-fox", "jump$", "over,", "the", "---", "lazy", "dog.".

Последнее слово "$$$" рассматривать не нужно.

Вашей программе будет также дано целое число, указывающее ширину окна w. Вы должны вывести слова с минимальным количеством пробелов между ними так, чтобы:
  1. количество символов в каждой строке не превышало w (за исключением символа новой строки).
  2. между двумя словами на одной строке должен быть хотя бы один пробел.
  3. крайний левый символ строки не должен быть пустым
  4. крайний правый символ строки не должен быть пустым за исключением, может быть, последней строки
  5. пробелы должны быть распределены по возможности равномерно между всеми словами строки. Если этого нельзя сделать точно, то большая порция пробелов должна располагаться ближе к правому краю строки.

При ширине вывода 21, вышеупомянутый текст отобразился бы следующим образом:

123456789012345678901

The quick brown-fox
jump$ over, the ---
lazy dog.
Описание ввода

Первая строка входного файла содержит только ширину окна w. Следующие строки содержат текст абзаца. Последняя строка содержит единственное слово "$$$".

Гарантируется что:
  • слово "$$$" не встречается внутри текста абзаца
  • суммарная длина двух любых, подряд идущих слов, разделенных одним пробелом, не превышает w
  • длина одного слова не превышает 50 символов
  • количество слов в абзаце не превышает 5000
  • ширина окна не превышает 100.

Описание вывода

Выходной файл должен состоять из слов текста абзаца.
Не должно быть никаких пробелов в начале и конце файла.

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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#include <iostream>
#include <vector>
#include <string>
#include <sstream>
#include <cctype>
#include <fstream>
 
using namespace std;
 
string inputSpace(string input, int size)
{
    string rez = "", buf = input, tep = "";
    
    int spaceNeed = size - input.length();
    int lineLengyh;
    
    bool flagg;
    
    if (spaceNeed == 0) {
        flagg = false;
        rez = input;
    }
    else {
        flagg = true;
    }
    
    while (flagg)
    {
        for (int i = buf.length() - 1; i >= 0; i--) {
            rez = buf[i] + rez;
            if (buf[i] == ' ' && buf[i - 1] != ' ' && spaceNeed > 0) {
                rez = ' ' + rez;
                spaceNeed--;
            }
            lineLengyh = rez.length();
        }
        
        if (spaceNeed == 0) {
            flagg = false;
        }
        else {
            buf = rez;
            rez = "";
        }
    }
    
    return rez;
}
 
int main()
{
    ifstream innFile("input.txt");
    ofstream outFile("output.txt");
    
    string line;
    stringstream ss;
    vector<string> vec;
    
    int maxLineSize;
    
    
    innFile>>maxLineSize;
    
    if (innFile.is_open()) {
        while (innFile.good()) {
            getline(innFile, line);
            
            ss << line << " ";
        }
    }
    
    line.empty();
    
    while(ss>> line)
    {
        
        vec.push_back(line);
    }
    vec.pop_back();
    
    int lineSize;
    line.empty();
    
    for(size_t i = 0; i <= vec.size(); i++)
    {
        line.clear();
        lineSize = 0;
        while(lineSize < maxLineSize)
        {
            lineSize += (int)vec[i].length();
            
            if(lineSize > maxLineSize) {
                i--;
                break;
            }
            
            if (i >= vec.size()){
                break;
            }
            
            line += vec[i];
            lineSize++;
            
            if(lineSize >= maxLineSize)
                break;
            
            line.push_back(' ');
            i++;
        }
        
        
        if (line[line.length() - 1] == ' ') {
            line.erase( line.end() - 1 );
        }
        
        if (i == vec.size()) {
 
            outFile << line << endl;
        } else {
            outFile << inputSpace(line, maxLineSize) << endl;
        }
        
    }
 
    innFile.close();
    outFile.close();
    return 0;
}
Выходной файл д.б. в формате win1251
Программа текст форматирует, но при проверке скрытых тестов, выдает ошибку. Какую ошибку выдает и что за тесты, не известно. Возможно я где-то не правильно понял задание или в самой программе есть хитрая ошибка.
Помогите пожалуйста разобраться. 2 недели мучаюсь, никак не могу понять в чем скрытый подвох.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.04.2016, 14:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Форматирование текста (C++):

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

Форматирование текста - C++
всем привет. Дан текстовый файл, который содержит строки различной длины. Создайте новый файл, в котором сохраните исходный текст в...

Форматирование текста в C++ - C++
Дан текст, состоящий из предложений, разделяемых точками. Напишите программу, производящую следующее форматирование: после каж- дой...

Форматирование текста записанного в файл - C++
В файле записан текст стихотворения. Форматировать текст так, чтобы каждый куплет из 4 строк следовал с одной и той же позиции, ...

Форматирование текста в классе с использованием шаблона - C++
Подскажите, написал класс с использованием шаблона. Входящие данные к примеру int или double , и мне их в итоге нужно перевести в формат...

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

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.04.2016, 14:31
Привет! Вот еще темы с ответами:

Форматирование вывода в c++ - C++
Вот к примеру код из C#: Console.WriteLine(&quot; {0} plus {1} ravno {2}&quot;, i, j, i+j); Как использовать примерно так-же в c++? Чтобы в cout...

Форматирование вывода - C++
Есть простенькая программа анализирующая частоту употребления слов в тексте, результат своей работы она сохраняет в файл таким образом: ...

Форматирование строк. cout - C++
Нужно задать формат строки, чтобы выводились первые три символа. я делал так: #include &lt;iostream.h&gt; #include &lt;iomanip.h&gt; #define S...

Форматирование ячеек в Excel - C++
Столкнулся с проблемой при форматировании ячеек в книге Excel. Задаю формат,после этого записываю значения.Необходимо записать...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru