Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.88/34: Рейтинг темы: голосов - 34, средняя оценка - 4.88
Василий-Робот
TECHNO
26 / 26 / 8
Регистрация: 04.11.2009
Сообщений: 366
1

Как динамически выделить память для строкового массива?

20.12.2010, 15:50. Просмотров 6381. Ответов 14
Метки нет (Все метки)

Собственно сам вопрос.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.12.2010, 15:50
Ответы с готовыми решениями:

Как динамически выделить память для конструкторов класса?
подскажите как динамически выделить память для конструкторов класса? class...

Как выделить динамически память для данных класса
Как выделить динамически память для данных класса ? class circle { double...

Как выделить память для двухмерного массива?
Как выделить память для двухмерного массива в С++ a=new int???

Как выделить память для динамического массива?
Как выделить память для динамического массива? typedef TPrimitives...

Как выделить память для двумерного массива указателей в куче?
Есть массив вида: unsigned char *ddtКак выделить память для такого массива в...

14
deadlock
376 / 356 / 23
Регистрация: 14.12.2010
Сообщений: 1,265
20.12.2010, 15:52 2
C++
1
char *array=new char[размер массива];
1
MILAN
888 / 782 / 186
Регистрация: 21.02.2009
Сообщений: 1,722
20.12.2010, 15:52 3
Василий-Робот, так же как и для числового.

C++
1
str=new char[N];
1
Василий-Робот
TECHNO
26 / 26 / 8
Регистрация: 04.11.2009
Сообщений: 366
20.12.2010, 16:01  [ТС] 4
А как обращаться потом к строке массива?
у меня к примеру массив А состоит из k строк. А когда пишу А[i], обращаясь к конкретной строке, то компилятор выдает:
invalid conversion from `char' to `const char*'
0
CyBOSSeR
Эксперт С++
2313 / 1686 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
20.12.2010, 16:04 5
Василий-Робот, используй вектор строк и забудь про динамическую память.
C++
1
2
3
4
5
6
7
8
9
#include <string>
#include <vector>
 
//...
std::vector<std::string> arr;
 
arr.push_back("First string");
arr.push_back("Second string");
//...
1
deadlock
376 / 356 / 23
Регистрация: 14.12.2010
Сообщений: 1,265
20.12.2010, 16:04 6
это строка, а не массив строк.
массив строк **array, точнее указатель на него
1
romedal
55 / 55 / 9
Регистрация: 18.03.2010
Сообщений: 345
Записей в блоге: 1
20.12.2010, 16:11 7
А так не подойдёт ?
C++
1
2
3
4
5
6
7
8
9
10
#include<string>
int main () {
 
 
const int n= 100;
string *h = new string[n];
 
...
 
}
1
no0ker
101 / 88 / 7
Регистрация: 17.12.2010
Сообщений: 416
20.12.2010, 16:58 8
а если использовать calloc()

char*a;
a=(char*)calloc(100,sizeof(char));

использовать можно примерно вот так
a[1]='g';
printf("%c",a[1]);
1
Василий-Робот
TECHNO
26 / 26 / 8
Регистрация: 04.11.2009
Сообщений: 366
20.12.2010, 23:03  [ТС] 9
Ребят спасибо всем за разнообразные ответы, но я в них просто запутался Чтобы было понятней и вам и мне, вот конкретный код. Строки 24, 31, 32
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
#include <conio.h>
#include <stdio.h>
#include <string.h>
int main()
{
    int i,j,k=0,d,v=-1,s=0;
    printf("MENYU:\n1 -> vvod strok\n2 -> uporyadochivanie massiva\n");
    printf("3 -> peremesh'enie bukv\n4 -> vivod strok\n5 -> konec programmi\n");
    while(v<1 || v>5)
    {
              printf("X = ");
              scanf("%d",&v);
    }
    while(v!=5)
    {
               if(v==1)
               {
                       while(k<1 || k>5)
                       {
                                 printf("vvedite kol. strok: ");
                                 scanf("%d",&k);
                       }
                       char buf[100];
                       char *A=new char[k];
                       for(i=0;i<k;i++)
                       {
                                       d=1;
                                       while(d<2)
                                       {
                                                 printf("vvedite strokГЈ #%d:\n",i+1);
                                                 scanf("%s",A[i]);
                                                 d=strlen(A[i]);
                                       }
                       }         
                       s++;  
               }
               if(v==2 && s>0)
               {
                       for(i=0;i<n;i++)
                       for(j=i+1;j<n;j++)
                       if(A[i]>A[j])
                       {
                                    buf=A[i];
                                    A[i]=A[j];
                                    A[j]=buf;
                       }
                       printf("MASSIV POSLE SORTIROVKI:\n");
                       for(i=0;i<k;i++)
                       printf("stroka #%d:\n%s\n",i+1,A[i]);
               }
               if(v==3 && s>0)
               {
                       printf("\nSTROKOVIY MASSIV:\n");
                       for(i=0;i<k;i++)
                       printf("stroka #%d:\n%s\n",i+1,A[i]);    
               else printf("strokoviy massiv esh'e ne vveden!");          
               }
               if(v==4 && s>0)
               {
                       }
                       }
    else 
    {
         printf("programma end");
    }
               
               
               
               
               
               
    
               
    getch();
    return 0;
}
Добавлено через 5 часов 54 минуты
Ау!) Давайте, помогайте!
0
romedal
55 / 55 / 9
Регистрация: 18.03.2010
Сообщений: 345
Записей в блоге: 1
21.12.2010, 03:41 10
Смотри, впринцыпе если бы ты писал на С++, то можно было бы создать строковый массив очень просто:
C++
1
2
3
4
#include<string>
int k;
cin>>k;
string *g = new string[k];
и дальше обращаешся к каждой строке через указатель g[i]

Если ты всё-же решишь писать на С, то придётся создать 2-мерный массив типа char:
C
1
2
3
4
5
6
7
8
#include<stdio.h>
 
int nstr; - количество строк;
int nstb; - максимальная длина строки;
scanf("%d, %d" &nstr, &nstb);
char **t = new char *[nstr]; //Это буде указатель на массив указателей типа char * (т.е. на строки)
for (int i = 0; i<nstr; i++)
t[i] = new char [nstb]; // Выделяем каждой строке массив типа char
Дальше к каждой строке обращаешся через t[i]
К каждому символу обращаешся через t[i][j]
1
ForEveR
В астрале
Эксперт С++
7997 / 4755 / 652
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
21.12.2010, 04:00 11
romedal, Не надо так делать, а? Зачем в STL впихивать работу с памятью, если есть вектор, список и иже с ним?
0
no0ker
101 / 88 / 7
Регистрация: 17.12.2010
Сообщений: 416
21.12.2010, 16:00 12
а можно офтоп? =)

а чем плохо динамическое выделение памяти через calloc\malloc ?
0
MILAN
888 / 782 / 186
Регистрация: 21.02.2009
Сообщений: 1,722
21.12.2010, 16:03 13
Цитата Сообщение от no0ker Посмотреть сообщение
а чем плохо динамическое выделение памяти через calloc\malloc ?
Не чем не плохо, просто ето как бы Сишный вариант, а в С++ используется new delete!!!!
0
CyBOSSeR
Эксперт С++
2313 / 1686 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
21.12.2010, 19:15 14
Цитата Сообщение от MILAN Посмотреть сообщение
Не чем не плохо, просто ето как бы Сишный вариант, а в С++ используется new delete!!!!
Дело не в вариантах. new в отличии от malloc вызывает конструкторы. delete в отличии от free деструкторы.
0
romedal
55 / 55 / 9
Регистрация: 18.03.2010
Сообщений: 345
Записей в блоге: 1
24.12.2010, 01:04 15
Ну в общем-то да, просто я немного зациклился на задании "динамически выделить память" так сказать "от руки" )))
1
24.12.2010, 01:04
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.12.2010, 01:04

Как в отдельной функции выделить память для динамического массива, объявленного в main
Доброго времени суток. Передо мной стоит задача выделения памяти для...

Динамически выделить память под массив
Добрый день форусчани Как можно выделить память под массив объекта класса...

Динамически выделить память под массив
Задание было в следующем: дан вещественный двумерный массив А. Поменять местами...


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

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

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