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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 23, средняя оценка - 4.83
Василий-Робот
TECHNO
26 / 26 / 5
Регистрация: 04.11.2009
Сообщений: 366
#1

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

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

Собственно сам вопрос.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.12.2010, 15:50
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как динамически выделить память для строкового массива? (C++):

Как выделить динамически память для данных класса - C++
Как выделить динамически память для данных класса ? class circle { double x,y,r; public:void In(); void Out(); ...

Как динамически выделить память для конструкторов класса? - C++
подскажите как динамически выделить память для конструкторов класса? class circle { double x,y,r; public: void...

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

Как выделить память для динамического массива? - C++
Как выделить память для динамического массива? typedef TPrimitives *TPrimitive; //... TPrimitives Primitives; Мне нужно выделить...

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

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

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

C++
1
str=new char[N];
1
Василий-Робот
TECHNO
26 / 26 / 5
Регистрация: 04.11.2009
Сообщений: 366
20.12.2010, 16:01  [ТС] #4
А как обращаться потом к строке массива?
у меня к примеру массив А состоит из k строк. А когда пишу А[i], обращаясь к конкретной строке, то компилятор выдает:
invalid conversion from `char' to `const char*'
0
CyBOSSeR
Эксперт С++
2304 / 1674 / 86
Регистрация: 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 / 355 / 8
Регистрация: 14.12.2010
Сообщений: 1,265
20.12.2010, 16:04 #6
это строка, а не массив строк.
массив строк **array, точнее указатель на него
1
romedal
54 / 54 / 1
Регистрация: 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 / 4
Регистрация: 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 / 5
Регистрация: 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
54 / 54 / 1
Регистрация: 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
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,545
Завершенные тесты: 3
21.12.2010, 04:00 #11
romedal, Не надо так делать, а? Зачем в STL впихивать работу с памятью, если есть вектор, список и иже с ним?
0
no0ker
101 / 88 / 4
Регистрация: 17.12.2010
Сообщений: 416
21.12.2010, 16:00 #12
а можно офтоп? =)

а чем плохо динамическое выделение памяти через calloc\malloc ?
0
MILAN
886 / 780 / 86
Регистрация: 21.02.2009
Сообщений: 1,722
21.12.2010, 16:03 #13
Цитата Сообщение от no0ker Посмотреть сообщение
а чем плохо динамическое выделение памяти через calloc\malloc ?
Не чем не плохо, просто ето как бы Сишный вариант, а в С++ используется new delete!!!!
0
CyBOSSeR
Эксперт С++
2304 / 1674 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
21.12.2010, 19:15 #14
Цитата Сообщение от MILAN Посмотреть сообщение
Не чем не плохо, просто ето как бы Сишный вариант, а в С++ используется new delete!!!!
Дело не в вариантах. new в отличии от malloc вызывает конструкторы. delete в отличии от free деструкторы.
0
romedal
54 / 54 / 1
Регистрация: 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
Привет! Вот еще темы с ответами:

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

Динамически выделить память под массив - C++
Добрый день форусчани Как можно выделить память под массив объекта класса class Save_Colection { public: pk *field; ...

Динамически выделить память под массив функций - C++
QByteArray (SerfingThread::*lp_GetRequest)(const QByteArray&amp; ,const QByteArray&amp;); как сделать тоже самое только через new? как правильно...

выделить память для массива*[] - C++
привет. чего-то не получается организовать работу массива char *c; это динамический массив строк длиной 10 при конструкторе ...


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

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

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