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

Указатели,массивы символов и динамическая память - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ итератор или интератор (iterator ог interator) http://www.cyberforum.ru/cpp-beginners/thread440109.html
Привет всем Задали мне тут вопрос, а я что-то засомневался правильно ли я его понял: "создать интератор" ? здесь опечатка и все-таки нужен "итератор" или же существуют и неизвестные мне "интераторы"? начал искать и нашел статью где есть фраза: Библиотека стандартных шаблонов Заголовок <iterator> больше не включается автоматически многими другими файлами заголовков.Вместо этого...
C++ как написать программу с копированием одномерных массивов Даны два массива, в первом найти позицыю первого нулевого элемента массива. Скопировать во второй массив все элементы расположиные после первого нулевого элемента, а затем до найденого первого нулевого элемента http://www.cyberforum.ru/cpp-beginners/thread440108.html
Полимморфизм C++
Возможность обращаться к подклассам через классс, от которого эти подкласы наследуют, - это и все на что способен полиморфизм или же есть нечто более глубокое в этом понятии?
C++ Программа
Дайте пожалуйста ссылку на рабочую версию с++. В разделе паскаль были ссылки на скачивание, а тут нету. В гугл и тп не посылать :cry:
C++ Именно в каких ситуациях используется "virtual" ? http://www.cyberforum.ru/cpp-beginners/thread440033.html
Привет всем. Я знаю, что с помощью virtual происходит полиморфизм. Но кто может показать еффективность ее (virtual) использования? (Если можно маленкий пример) Именно, в каких ситуациях она используется? Спасибо заранее...
C++ Отформатировать вывод программы вобщем вот программа все работает хорошо вот только немогу придумать как если использовать cout сделать одинаковые промежутки между цифрами. #include "stdafx.h" using namespace std; long double x=1, y, i, n; int main() { cout<<" "; for (n=1; n<=10; n++) cout<<" "<<n; подробнее

Показать сообщение отдельно
stawerfar
 Аватар для stawerfar
140 / 54 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
03.02.2012, 23:46  [ТС]     Указатели,массивы символов и динамическая память
Если кому из участвующих интересно то я закончил, это бедствие. Да конечно о чистоте письма тут не ведётся речи, просто я практике (попытался и мне это удалось ) сделал то что по теории мало прошёл, т.е. Лафоре указатели рассматривает достаточно поверхностно.Так же такого понятия ка оптимизация кода я тоже пока не проходил. Да и к тому же ход мысли... у каждого человека разный.Разные вещи можно сделать по разному. В моём коде много вещёй которые можно сделать по другому но я делал тренируясь в процессе, ну можно сказать пробовал и так и этак.Так что вот что получилась. Программа сначала демонстрирует работу конструктора и параметров по умолчанию, после у пользователя берется ЛЮБОГО размера МАТРИЦА(массив указателей ,на массивы), все это выделяется в динамической памяти ровно столько сколько нужно, далее производиться сортировка по убыванию и возрастанию методом пузырька, сортируются указатели. Правда как и требовалось по заданию символ считается меньше если он раньше стоит по таблице ASCII
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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
#include<iostream>
#include<conio.h>
#include<string>
#include<stdlib.h>
/************************************************************************************************/
enum direction{LOWEST,DESCENDING};//перечисление направления сортировки
/**************************************************************************************************************************************/
 
class metring
{
protected:
    char* ch_pt;//для хранения выражения введённого пользователем
    int imax_fmas;//максимально количество элементов массива fmas
    float* fmas ;//массив вещественных чисел
public:
    //конструктор без параметров
    metring(void);
    //конструктор содним параметром
    metring(char* ch_c);
    //деструктор для освобождение памяти
    virtual~metring(void);
    //операция преобразования из объекта класса в float*
    operator float*(void);
    //возврат количества элементов в вещественном массиве
    int return_imax_fmas(void);
    //получение от пользователя набора чисел 
    void get_number(void);
    //оператор для преобразования из объекта в массив символов
    operator char*(void);
};
 
//конструктор без параметров
metring::metring(void):imax_fmas(1)
{
    setlocale(LC_ALL,"Russian");//разрешаю вывод Русского языка
    ch_pt = new char[2];//первый раз выдиляю память под строку
    ch_pt[0]='\0';//принудительное указаник конца строки
    fmas = new float[imax_fmas];//создаём подходящий по размерам массив для чисел
}
 
//конструктор содним параметром
metring::metring(char* ch_c)
{
    
    setlocale(LC_ALL,"Russian");//разрешаю вывод Русского языка
    ch_pt = new char[2];//первый раз выдиляю память под строку
    ch_pt[0]='\0';//принудительное указаник конца строки
    imax_fmas=1;
    fmas = new float[imax_fmas];//создаём подходящий по размерам массив для чисел   
 
    
    if(strlen(ch_c)>1)
    {delete []ch_pt;}//освобождаю ранее выделенную память т.к. она не достаточна для хранения новой строки 
    ch_pt = new char [strlen(ch_c)+1];
    ch_pt[0]='\0';//принудительное указаник конца строки
    strcpy(ch_pt,ch_c);
    ch_pt[strlen(ch_c)]='\0';//принудительное указаник конца строки
}
//деструктор для освобождение памяти
metring::~metring(void)//освобождаю память
{delete []ch_pt;delete []fmas;}
//получение от пользователя набора чисел 
void metring::get_number(void)
{
    int ilen = 1;//для хранения длинны строки
    char* ch_pt_temp ;//временный банк для обмена
    char ch_temp[2]="e";//инициализация любым значение отличным от нуля и не равным 13(знаку Enter)
    //создание строки необходимого размера для хранения строки ch_c
    while(ch_temp[0]!=13)//продолжать пока пользователь не нажмёт клавишу Enter
    {
        ch_pt_temp = new char[strlen(ch_pt)+2];//выделяю память под переменную для обмена
        ch_pt_temp[0]='\0';//принудительное указаник конца строки           
        bool flag=true;//флаг для инкримента счетчика символов
        ch_temp[0] = getche();//отобразить символ и записать его значение в переменную типа char
        if(ilen!=1&&ch_temp[0]!=13)//если ilen!=1 и ch_temp!=Enter 
        {                                   //  то освобождаем память для перевыдиления
            //перед освобождением памяти делаю копию значения строки
            //копируем сиволы в нашу строку с нулевым символом
        
            for(int i = 0, r = strlen(ch_pt_temp); i < strlen(ch_pt)+1;i++,r++)
            {
                ch_pt_temp[r]=ch_pt[i]; 
            }
            ch_pt_temp[strlen(ch_pt_temp)+1];//принудительное завершение строки
            delete []ch_pt;//освобождаю выделенную память
            if(ch_temp[0]==8&&strlen(ch_pt_temp))
            {
                std::cout<<"\x20\x08";//затираем предыдущий символ знаком пробела и перемещаем курсор
                ilen--;//уменьшаем значение количество символов в строке
                flag=false;
            }
            else if(ch_temp[0]==8&&strlen(ch_pt_temp)<=0)
            {
                std::cout<<"\x3A";
            }
            ch_pt=new char[ilen+2];//заного выделяю память 1 для нового сивола другой для знака \0 конца строки
            ch_pt[0]='\0';//принудительное указаник конца строки
            //возвращаю значение строки предшествующие перевыдилинию памяти
            //копируем сиволы в нашу строку с нулевым символом
            int itemplen=(strlen(ch_pt_temp)==ilen-2)?ilen-1:ilen;
            for(int i = 0, r = strlen(ch_pt); i < itemplen+1;i++,r++)
            {
                ch_pt[r]=ch_pt_temp[i]; 
            }
            if(strlen(ch_pt_temp)!=ilen-2)
            {ch_pt[ilen-1]='\0';}
            
        }
        if(ch_temp[0]!=13&&ch_temp[0]!=8)//если ch_temp!=Enter помещаем символ в строку
        {
            //копируем сиволы в нашу строку с нулевым символом
            for(int i = 0, r = strlen(ch_pt); i < strlen(ch_temp)+1;i++,r++)
            {
                ch_pt[r]=ch_temp[i];    
            }
            
        }
        delete[]ch_pt_temp;//освобождаем память
        if(flag)
        {ilen++;}//инкременация счетчика символов
    }
    imax_fmas=ilen;//запись количества символов
    std::cout<<std::endl;//производим действия клавиши Enter
}
 
//операция преобразования из объекта класса в float*
metring:: operator float*(void)
{
    char* ch_pt_temp ;//временный банк для обмена
    int isecondlen=2,//разряд числа
        idex=0;//индекс массива который представляет одно число
    bool flag= true;//флаг для разрешения выдиления памяти для ch_pt_temp
    
    //разбираем массив т.е. отдиляем числа от запятых, целые от вещественных
    for(int i = 0; i<strlen(ch_pt);i++)
    {
        if(flag)//выделяем каждый раз когда следует отдельное число 
        {
            ch_pt_temp = new char[isecondlen];//выделяю память под переменную для обмена
            ch_pt_temp[0]='\0';//принудительное указаник конца строки
            flag=false;//запрещаем перевыдиление памяти пока не закочится число
        }
        
        if(isecondlen>strlen(ch_pt_temp)&&(strlen(ch_pt_temp)!=0)&&ch_pt[i]!=',')
        {
            char* ch_pt_temp2 = new char[isecondlen+2];//выделяю память для временной переменной
            ch_pt_temp2[0]= '\0';//принудительно инициализирую её первый символ нулём
            //копируем сиволы в нашу строку с нулевым символом
            for(int i = 0, r = strlen(ch_pt_temp2); i < strlen(ch_pt_temp)+1;i++,r++)
            {
                ch_pt_temp2[r]=ch_pt_temp[i];   
            }
            delete []ch_pt_temp;//освобождаю память
            //выделяю памяти больше на одну единицу
            ch_pt_temp = new char[isecondlen+2];//выделяю память под переменную для обмена
            ch_pt_temp[0]= '\0';//принудительно инициализирую её первый символ нулём
 
            //копируем сиволы в нашу строку с нулевым символом
            for(int i = 0, r = strlen(ch_pt_temp); i < strlen(ch_pt_temp2)+1;i++,r++)
            {
                ch_pt_temp[r]=ch_pt_temp2[i];   
            }
            delete []ch_pt_temp2;//освобождаю память
        }
        if(ch_pt[i]!=',')//если символ не является разделительным символом то просто копируем цифру
        {
            ch_pt_temp[idex++]=ch_pt[i];//копируем символ
            ch_pt_temp[idex]= '\0';//принудительное завершение строки
            isecondlen++;//увеличиваем разряд числа
        }
        if(ch_pt[i]==','||(i+1>=strlen(ch_pt)))//если символ разделительный то переобразуем массив ch_pt_temp в float
        {
            
            isecondlen=2;//инициализируем  флаг на 1 следящий за разрядом числа
            flag=true;//разрешаем перевыдиление памяти т.к. число закончилось
            if(imax_fmas)//если не нулевое значение значит нужно перевыделить память для вещественного массива
            {
                float* f_mas_temp = new float[imax_fmas];//создаю временный массив для страховки основного массива fmas
                for(int e =0 ; e<imax_fmas;e++)
                {
                    f_mas_temp[e]=fmas[e];//копирую значения массива
                }
                delete []fmas;//освобождаю память
                fmas = new float[imax_fmas+1];// перевыдиляю память
                for(int e =0 ; e<imax_fmas;e++)
                {
                    fmas[e]=f_mas_temp[e];//копирую значения массива
                }
                delete[]f_mas_temp;//освобождаю выделенную память
            }
            ch_pt_temp[idex]='\0';//принудительно завершаю строку нулевым символом
            idex = 0;//обнуление индекса
            //проверка числа т.е. было оно целым или вещественным путем поиска символа '.'
            for(int k = 0 ; k<strlen(ch_pt_temp);k++)
            {
                if(ch_pt_temp[k]=='.')//если такой символ есть то меняю его на ',' так требует atof
                {ch_pt_temp[k]=',';}
            }
 
            //преобразуем массив символов в вещественное число
            fmas[imax_fmas-1] = atof(ch_pt_temp);
            if(!(i+1>=strlen(ch_pt)))
            {imax_fmas++;}//увеличиваем число элементов в вещественном массиве
            delete[]ch_pt_temp;//освобождение памяти для массива для представления любого числа
        }
        
    }
    return (fmas);//возвращаю массив чисел типа float
}
//оператор для преобразования из объекта в массив символов
metring:: operator char*(void)
{ return (ch_pt); }
//возврат количества элементов в вещественном массиве
int metring:: return_imax_fmas(void)
{return(imax_fmas);}
/**************************************************************************************************************************************/
class String : private metring
{
private:
    char** ch_pt_week;//указатель на календарь недели
    enum direction directory;//направление сортировки
    int ciDAYOFWEEK;//максимальный размер внешнего измерения массива
public:
    //конструктор без параметров
    String(void);
    //конструтрор с двумя параметрами
    String( char** cch_pt, const int ciSIZE);
    //диструктор для освобождения памяти
    ~String(void);
    //получить дни недели от пользоватля
    void get_days_of_week(void);
    //вывод на экран дней нидели
    void show_day_of_week(void);
    //сортировка указателей по алфовиту по возрастанию или убыванию
    void sort_days_of_week(direction);
    //увеличение строки путём приклейвания символов и перераспредиления памяти
    void strcat(const char* =""  ,const bool =false);
    //перевыдиление памяти внутриннего измерения
    char** realoc(const int&,const int&);
    //перевыдиление памяти внешнего измерения
    char** realoc(const int&);
};
//конструктор без параметров
String::String(void):ciDAYOFWEEK(7),metring()
{
    setlocale(LC_ALL,"Russian");//разрешаю вывод Русского языка
    ch_pt_week = new char*[ciDAYOFWEEK];//выделяю память для дней недели 
    for(int i = 0; i <ciDAYOFWEEK; i++)
    {
        switch(i)
        {
            case 0:
                    *(ch_pt_week+i) = new char[strlen("Monsday")];
                    break;
            case 1:
                    *(ch_pt_week+i) =  new char[strlen("Tuesday")];
                    break;
            case 2:
                    *(ch_pt_week+i) =  new char[strlen("Wednesday")];
                    break;
            case 3:
                    *(ch_pt_week+i) =  new char[strlen("Thursday")];
                    break;
            case 4:
                    *(ch_pt_week+i) =  new char[strlen("Friday")];
                    break;
            case 5:
                    *(ch_pt_week+i) =  new char[strlen("Saturday")];
                    break;
            case 6:
                    *(ch_pt_week+i) =  new char[strlen("Sunday")];
                    break;
        }
    }
}
//конструтрор с двумя параметрами
String::String( char** cch_pt, const int ciSIZE):ciDAYOFWEEK(ciSIZE)
{
    setlocale(LC_ALL,"Russian");//разрешаю вывод Русского языка
    ch_pt_week = new char* [ciSIZE];//выделяю достаточное количество для хранения календаря память
    
     for(int i =0; i < ciSIZE; i++)//копирую значения массива
     {
        *(ch_pt_week+i)= new char[strlen(*(cch_pt+i))+1];//сначало выделяю память
        strcpy(*(ch_pt_week+i),*(cch_pt+i));//после копирую значения
     }
}
 
//диструктор для освобождения памяти
String::~String(void)
{
    for(int i=0;i<ciDAYOFWEEK;i++)//освобождаю память из под двумерного массива указателей
    {delete ch_pt_week[i];}
}
//увеличение строки путём приклейвания символов и перераспредиления памяти
void ::String:: strcat(const char* cchc  ,const bool cbflag )
{
      static int si_sizea;//для подстчета элемента массива
    if(ch_pt[strlen(ch_pt)]=='\0'&& !cbflag)//если строки не хватает то перевыделяем память
    {
        char* ch_ptemp = new char [strlen(ch_pt)+1];//созадю временную строку  для обмена
        strcpy(ch_ptemp,ch_pt);//дублирую содержимое поля
        delete []ch_pt;//освобождаю не подходящую по размерам память
        ch_pt = new char[strlen(ch_ptemp)+2];//перевыделяю память на один символ 1 байт больше
        strcpy( ch_pt,ch_ptemp);//возращаю содержимое поля
        ch_pt[strlen(ch_ptemp)] = '\0';//принудительно указываю конец строки
        delete []ch_ptemp;//освобождаю память для ненужных банков
    
    }
    if(!cbflag)
    {
        //приклеиваю к строке приходящий символ символ\
        поиск нулевого символа
        int isymb=0;
        
        for(int i = 0 ; i<strlen(ch_pt)+2;i++)
        {
            if(ch_pt[i]=='\0')
            {isymb = i;}
        }
            
 
            ch_pt[isymb]=*(cchc+si_sizea);
            ch_pt[isymb+1]='\0';
                
 
    }
//мы перевыделяем память на минимум т.е один символ с учётом нулевого
    else if(cbflag)
    {
        delete []ch_pt;//освобождаю не подходящую по размерам память
        ch_pt = new char[2];//перевыделяю память
        *ch_pt = '\0';//принудительно указываю конец строки
    }
    si_sizea++;
}
//перевыдиление памяти внешнего измерения
char**::String:: realoc(const int& isize)
{
    char** ch = new char*[ciDAYOFWEEK];//временная переменная для перевыдиления памяти
    for(int i = 0;i<ciDAYOFWEEK;i++)//выделяю память для внутренних измерений
    {
        *(ch+i) = new char[strlen(ch_pt_week[i])+1];
    }
    for(int i = 0;i<ciDAYOFWEEK;i++)//теперь дублирую значения всей матрицы
    {
        strcpy(*(ch+i),ch_pt_week[i]);
        *(*(ch+i)+strlen(ch_pt_week[i]))= '\0';//указываю принудительный конец строки
    }
    for(int i = 0;i<ciDAYOFWEEK;i++)//освобождаю не достаточный блок памяти
    {delete ch_pt_week[i];}
    
    char** ch_pt_week = new char*[isize];//перевыделяю память на    isize еденицы больше
    for(int i = 0;i<isize;i++)//выделяю память для внутренних измерений
    {
        if(i<ciDAYOFWEEK)
        {
            ch_pt_week[i] = new char[strlen(*(ch+i))+1];//перевыделяю память в соответсвие со значениями
            ch_pt_week[i][0]='\0';//прунудительно указываю конец строки во избежания подводных камней
        }
        else
        {
            ch_pt_week[i] = new char[2];//иначе выделяю минимум для одного символа
            ch_pt_week[i][0]='\0';//прунудительно указываю конец строки во избежания подводных камней
        }
    }
    for(int i = 0;i<isize;i++)//возвращаю все значения матрицы
    {
        if(i<ciDAYOFWEEK)
        {           
            strcpy(ch_pt_week[i],ch[i]);
        }
        else
        {
            ch_pt_week[i][0]='\0';//прунудительно указываю конец строки во избежания подводных камней
        }
    }
    ciDAYOFWEEK=isize;//изменение счётчика
    return ch_pt_week;
}
//перевыдиление памяти внутреннего измерения
char** ::String:: realoc(const int& isize,const int& ciMax)
{
    char* ch = new char[strlen(*(ch_pt_week+ciMax))+1];//временная переменная для перевыдиления памяти
    strcpy(ch,*(ch_pt_week+ciMax));//дублирование значиния строки
    delete ch_pt_week[ciMax];//освобождение памяти
    *(ch_pt_week+ciMax) = new char[strlen(ch)+isize];//перевыдиление памяти больше на 1 байт
    *(ch_pt_week+ciMax)[0]= '\0';//принудительное указание конца строки
    strcpy(*(ch_pt_week+ciMax),ch);//приклеиваю строку
    *(*(ch_pt_week+ciMax)+strlen(ch))= '\0';//принудительное указание конца строки
    return (ch_pt_week+ciMax);
}
//получить дни недели от пользоватля
void ::String:: get_days_of_week(void)
{
    int ciDAYOFSYMBOL;//максимальный размер внутреннего измерения массива
    int ilen=0;//для слижения за пределами массива
    String String_temp;//временный объект для хранения строки
    
    std::cout<<"Введите дни недели через запятую :";
    String::get_number();//вызов метода базового класса
 
    int ite=0;//для подсчета слова
    
    //разбор строки т.е. распредиление названий недели по массивам
    for(int i =0,k=0 ;i <imax_fmas;i++)
    {
        if(*(ch_pt+i)!=','&&*(ch_pt+i)!='\0')
        {
            String_temp.strcat(ch_pt);//копирую символы в динамический массив
            ite++;
        }
        else 
        {
            ilen++;//увеличиваю счётчик предела массива
            if(!(ilen<ciDAYOFWEEK))//если у нас не достаточно памяти для внешнего измерения массива ch_pt_week
            {                       // то перевыдиляю память для внешнего измерения массива ch_pt           
                //вычисляем на скользо необходимо увеличить строку 
                int itemp =(ilen==ciDAYOFSYMBOL)?1+ciDAYOFSYMBOL:(ilen+1);
                //перевыделяем память для строки на itemp
                ch_pt_week=realoc(itemp);
            }
            ciDAYOFSYMBOL = strlen(*(ch_pt_week+k));//получаю размер строки
            if(!(ciDAYOFSYMBOL>ite))//если строка не помещается
            {                                                           //то перевыдиляю память
                
                //вычисляем на скользо необходимо увеличить строку 
                int itemp = (ciDAYOFSYMBOL==ite)? 1+ciDAYOFSYMBOL:(ite +1);
                //перевыделяем память для строки на itemp байт
                
                (ch_pt_week[k])=*realoc(itemp,k);
                
            }
            strcpy(*(ch_pt_week+k),static_cast<char*>(String_temp));//копирую содержимое строки
            *(*(ch_pt_week+k)+strlen(*(ch_pt_week+k)))='\0';//принудительно указываю конец строки
            String_temp.strcat("",true);//очищаю строку и перевыделяю память
            k++;//увеличиваю счётчик элементов для массива ch_pt_week
            ite=0;
            if(*(ch_pt+i)=='\0')//если конец строки то завершаем цикл
            {break;}
        }
    }
    
}
//вывод на экран дней нидели
void ::String:: show_day_of_week(void)
{
    for(int i = 0;i<ciDAYOFWEEK;i++)//показать поле 
    {std::cout<<*(ch_pt_week+i)<<' ';   }
    std::cout<<std::endl<<std::endl;
}
 
//сортировка указателей по алфовиту по возрастанию или убыванию
void ::String:: sort_days_of_week(direction direct)
{
    for(int i = 0; i<ciDAYOFWEEK-1;i++)
    {   
        for(int d=i+1;d<ciDAYOFWEEK;d++)
        {
            switch(direct)
            {
            case LOWEST://сортировка по возрастанию
                    if(*(ch_pt_week+i)>*(ch_pt_week+d))
                    {
                        char* pttemp = ch_pt_week[i];
                        ch_pt_week[i]=ch_pt_week[d];
                        ch_pt_week[d]=pttemp;
                    }
                    break;
            case DESCENDING://сортировка по убыванию
                    if(*(ch_pt_week+i)<*(ch_pt_week+d))
                    {
                        char* pttemp = ch_pt_week[i];
                        (ch_pt_week[i])=(ch_pt_week[d]);
                        ch_pt_week[d]=pttemp;                   
                    }
                    break;
            
            }
        }
        }
}
 
/**************************************************************************************************************************************/
 
int main(void)
{
 
    char* v[7]={"Monsday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"} ;
    const int i= 7;
    //Инициализация полей конструктором
    class String String_val(v,i);
    //Вывод на экран
    std::cout<<"Работа конструктора:"<<std::endl;
    String_val.show_day_of_week();
    //Получения любого значения от пользователя
    String_val.get_days_of_week();
    //Вывод на экран
    String_val.show_day_of_week();
    //Сортировка указателей пузырьком по убыванию
    String_val.sort_days_of_week(direction(DESCENDING)); 
    //Вывод на экран
    std::cout<<"Работа сортировки по убыванию :"<<std::endl;
    String_val.show_day_of_week();
    //Сортировка указателей пузырьком по возрастанию
    String_val.sort_days_of_week(direction(LOWEST));
    //Вывод на экран
    std::cout<<"Работа сортировки по возрастанию :"<<std::endl;
    String_val.show_day_of_week();
 
    system("pause");
return 0;
}
Ещё раз сори за "чистоту", Москва не сразу строилась..
 
Текущее время: 08:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru