Anonymous     Text only     02 Feb 2012    
 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
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
#define M 10 //Minimum number of pointers
char **CreateDAP(); //Function create Dinamic array of pointer
char *CreateString(char **dap); //Прототип функции, считывающей строки из динамического массива указателей в единую динамическую строку
void main()
{
clrscr();
char **dap, *str;
dap = CreateDAP(); //Создаем динамический массив указателей на строки (ДМУ)
str = CreateString(dap);//Создаем строку
printf ("%s", str);//Выводим строку
getch();
}
char **CreateDAP()
{
char str[200];
char **dap = new char*[M]; //Выделили память под ДМУ
for (int i = 0; gets(str), str[0] != '\0'; i++)//Цикл считывает строки до тех пор, пока не будет передана пустая строка
{
dap[i] = new char[strlen(str)+1];//Выделяем память под строку
strcpy(dap[i], str);//Копируем строку в выделенную область памяти
if ((i+1)%M == 0) //Если не хватает указателей, выделяем память под новые указатели
{
char **dap1 = new char* [i+1+M];
for (int j= 0; j<= i; j++)
dap1[j] = dap[i];
delete dap1;
dap=dap1;
}
}
dap[i] = NULL;//Последнего указателя не существует, для того чтобы мы знали, что указатели закончились
return dap;//Возвращаем ДМУ
}
char *CreateString (char **dap)
{
int sizeStr = 0;
for (int i = 0; dap[i] != NULL; i++)//Пока не натолкнемся на NULL
{
sizeStr+= strlen(dap[i]);//Считаем сумарную длину всех строк
}
char *str = new char[sizeStr];//Выделяем память под строку, размера суммы всех строк в ДМУ.
strcpy(str, dap[0]);//Копируем первую строку
for (i = 1; dap[i] != NULL; i++)//Копируем остальные строки
strcat(str, dap[i]);
return str;//Возвращаем строку
}