С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Разобраться с рекурсией: stack overflow http://www.cyberforum.ru/cpp-beginners/thread1700475.html
#include<iostream> #include<vector> #include<string> #include<math.h> #include<cmath> #include<algorithm> using namespace std; void ruda(double n,int baza) { if(n>1)
C++ Наследование классов. Не работает вывод площади Не выводит площадь треугольника. От линии наследуется треугольник. Код прилагается #include<iostream> using namespace std; class cLine { protected: int x, y, xx, yy; public: cLine(); http://www.cyberforum.ru/cpp-beginners/thread1700440.html
Найти количество цепочек, в которых элементы возрастают C++
Как можно найти количество цепочек в которых элементы возрастают? Пример: 1 2 3 возрастает 0 -3 -5 спадает 10 21 потом снова возрастает Итого 2 промежутка Вот код
C++ Ошибка в сортировке массива
#include <iostream> #include <iomanip> #include <time.h> using namespace std; const int nmax = 100; //Функция создает динамический массив а размера n
C++ Количество символов после запятой http://www.cyberforum.ru/cpp-beginners/thread1700433.html
cout << "Введите Е: "; cin >> E; for (i = 1; fabs(drob)>E; i++) { s1 += drob; drob*= -x*x / (i + 1); A++; } cout << "Значение функции с точностью " <<E<< " равно " << s1 << endl;...
C++ Найти сумму элементов массива с нечетными номерами и произведение элементов между двумя отрицательными элем написать на С++. дан массив из N элементов (вещественные числа) . Вычислить : 1. сумму элементов массива с нечетными номерами. 2. произведение элементов массива, расположенных между первым и... подробнее

Показать сообщение отдельно
even_murmansk
0 / 0 / 0
Регистрация: 01.04.2016
Сообщений: 1

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

01.04.2016, 14:31. Просмотров 446. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.