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

Строки, обработка - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Создать файл и найти наибольшее из чисел, стоящих на нечетных местах http://www.cyberforum.ru/cpp-beginners/thread527971.html
Дан файл(его нужно создать), компоненты которого являются действительными числами. Найти: наибольшее из значений модулей компонент с нечетными номерами. Файл создать удалось с числами, а дальше...
C++ Составить программы по алгоритмам Народ, помогите пожалуйста, нужно по этим алгоритмам создать три программы, сделать нужно на обычном си. http://www.cyberforum.ru/cpp-beginners/thread527970.html
Главная диагональ в двумерном массиве C++
Нужно подсчитать сумму элементов главной диагонали, что не так не пойму, может вы заметите ошибку, а точнее неточность) Программа считает только последнюю строку матрицы, а надо что бы считала по...
Если в строках матрицы есть хотя бы один положительный элемент ,то поменять знаки всей матрицы на противоположные C++
матрица задается все нормально... но не выполняется условие..... условие такое:если в строках матрицы есть хотя бы один положительный элемент ,то поменять знаки всей матрицы на противоположные.......
C++ Дана матрица А размером . Найти номер столбца, элементы которого образуют возрастающую последовательность. http://www.cyberforum.ru/cpp-beginners/thread527933.html
Дана матрица А размером . Найти номер столбца, элементы которого образуют возрастающую последовательность.
C++ Решить уравнение методом Гаусса надо посчитать методом гаусса ур-е A \cdot X = B 3-размерность A = \begin{pmatrix} 2.74 & -1.18 & 3.17 \\ 1.12 & 0.83 & -2.16 \\ 0.81 & 1.27 & 0.76 \end{pmatrix} подробнее

Показать сообщение отдельно
kristi1
10 / 10 / 1
Регистрация: 07.03.2010
Сообщений: 465

Строки, обработка - C++

25.03.2012, 22:28. Просмотров 307. Ответов 0
Метки (Все метки)

Добрый вечер, я написала программу, но она не совсем верно работает, посмотрите пожалуйста, я ошибку найти не могу, тыкните мордочкой, очень вас прошу, спасибо=)
Задание само:
произвольный заданный текст вывести в виде абзаца с заданной длиной строки. При этом обозначить отступ от левого края в первой строка абзаца на заданное число позиций; размещение каждого слова целиком в одной и той же строке, (ликвидировать переносы, которые обозначены в тексте знаком "-" в конце строки)
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
129
130
131
132
133
134
135
136
137
138
#include "fstream"
#include "iostream"
#include "vector"
 
template<class Type>
struct myvec
{
    myvec()
    {
        val = nullptr;
        sz = 0;
    }
 
    Type& operator[](int n)
    {
        return val[n];
    }
 
    void push_back(Type t)
    {
        Type* tmp = new Type[sz + 1];
        memcpy(tmp, val, sizeof(Type) * sz);
        delete[] val;
        val = tmp;
        
        val[sz++] = t;
    }
    void push_front(Type t)
    {
        Type* tmp = new Type[sz + 1];
        memcpy(tmp + 1, val, sizeof(Type) * sz);
        
        delete[] val;
        val = tmp;
        val[0] = t;
        sz++;
    }
    void erase(size_t n)
    {
        n++;
        Type* tmp = new Type[sz - 1];
        memcpy(tmp, val, sizeof(Type) * (n - 1));
 
        delete[] val[n - 1];
        memcpy(tmp + (n - 1), val + (n), sizeof(Type) * (sz - (n - 1)));
        
        delete[] val;
        val = tmp;
        sz--;
    }
    size_t size()
    {
        return sz;
    }
protected:
    Type* val;
    size_t sz;
};
struct param
{
    int tablen;
    int strln;
};
 
void process(myvec<char*> text, param p, myvec<char*> &ntext)
{
    for (size_t i = 0; i < text.size() - 1; i++)
    {
        if (strrchr(text[i], '-'))
        {
            size_t sz = strlen(text[i]) + strlen(text[i + 1]) - 1;
            char* n = new char[sz];
            memcpy(n, text[i], strlen(text[i]) - 1);
            memcpy(n + strlen(text[i]) - 1, text[i + 1], strlen(text[i + 1]));
            text.erase(i + 1);
            text[i] = n;
            text[i][sz] = 0;
            i--;
        }
    }
 
    size_t itr = 0;
 
    for (size_t i = 0; i < p.tablen; i++)
        text.push_front(" ");
 
    while(itr < text.size())
    {
        int jtr = p.strln;
        
        ntext.push_back(new char[128]);
        ntext[ntext.size() - 1][0] = 0;
 
        while(jtr >= strlen(text[itr]) || ( jtr == p.strln && p.strln < strlen(text[itr]) ) )
        {
            strcat(ntext[ntext.size() - 1], text[itr]);
            
            if (!isspace(*text[itr]))
                strcat(ntext[ntext.size() - 1], " ");
            
            jtr -= strlen(text[itr++]);
 
            if (jtr <= 0)
                break;
 
            if (itr == text.size())
                return;
        }
 
    }
}
 
int main()
{
    std::ifstream fin("in.txt", std::ios::in);
    std::ofstream fout("out.txt", std::ios::out);
 
    myvec<char*> strings;
    strings.push_back(new char[512]);
 
    int i = 0;
    while(fin >> strings[i])
    {
        i++;
        strings.push_back(new char[512]);
    }
 
    param p;
    std::cout << "Please, enter tab and string length : ";
    std::cin >> p.tablen >> p.strln;
    myvec<char*> ns;
    process(strings, p, ns);
 
    for (size_t i = 0; i < ns.size(); i++)
        fout << ns[i] << "\n";
 
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru