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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.76
krylatka
0 / 0 / 0
Регистрация: 08.03.2011
Сообщений: 9
#1

Трехмерный динамический массив типа char - C++

03.04.2011, 21:48. Просмотров 2179. Ответов 12
Метки нет (Все метки)

Здравствуйте! Я хочу создать двухмерную матрицу, каждым элементом которой должна являться символьная строка длиной 20. По сути получается трехмерный массив. При этом память под массив нужно выделять динамически. Подскажите, пожалуйста, как это сделать, а то у меня ошибка на ошибке.
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
//Mult.h
class Mult
{
public:
    Mult();
    ~Mult();
    void Set_Mult(int n);
private:
    char ***mult;
};
 
//Mult.cpp
#include <iostream>
#include <string.h>
#include <conio.h>
#include <locale.h>
using namespace std;
#include "Mult.h"
 
Mult::Mult()
{
    ***mult=NULL;
}
 
void Mult::Set_Mult(int n)
{
    setlocale(LC_ALL, ".1251");
    int i, j, m;
    mult = new char**[n];
    for(i=0; i < n; i++)
    {
        cin>>m;
        mult[i]=new char*[m];
        for(j=0; j<m; j++)
            for(k=0;k<20;k++)
            {
                cout<<"s["<<j<<"]:";
                puts(mult[i][j]);
            }
    }
}
 
//Main.cpp
#include <locale.h>
#include <iostream>
#include "Mult.h"
using namespace std;
 
int main()
{
    setlocale(LC_ALL, ".1251");
    Mult a;
    int n;
    cout<<"Введите количество множеств: ";
    cin>>n;
    a.Set_Mult(n);
    return 0;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.04.2011, 21:48
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Трехмерный динамический массив типа char (C++):

двумерный динамический массив типа char - C++
#include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;windows.h&gt; using namespace std; void RussianMessage(const char *str) { ...

Посмотрите объявление вектора и попытайтесь создать динамический массив, содержащий элементы типа char - C++
#include &lt;iostream&gt; #include &lt;vector&gt; using namespace std; int main() { vector&lt;int&gt; DynArrNums (3); DynArrNums = 365; ...

Трехмерный динамический массив - C++
Здравствуйте друзья, я переписываю код с Delphi на C++. В Delphi был задан динамический трехмерный массив следующим образом: ...

Трехмерный динамический массив - C++
Помогите создать трехмерный динамический массив, в c++ не сильно шарю, а в гугле нужной информации не нашёл. Добавлено через 10 минут ...

Трехмерный массив char - C++
здравствуйте, вопрос такой: есть массив например char Aэлементов есть функция которая обращается к одному из элементов этого...

Заполнить и вывести трехмерный динамический массив - C++
Создать трехмерный динамический массив. Заполнить его случайными числами и вывести результат на экран. Заполнение и вывод сделать через...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
gGrn-7DA
мну довольно <(-__-)l
203 / 192 / 1
Регистрация: 17.01.2010
Сообщений: 2,392
Завершенные тесты: 1
03.04.2011, 21:52 #2
C++
1
2
3
4
5
6
for(j=0; j<m; j++)
{
        mult[i][j]=new char[20];
        cout<<"s["<<j<<"]:";
        puts(mult[i][j]);
}
Замени кусок в функции Set_Mult
0
almazsr
232 / 169 / 7
Регистрация: 13.11.2010
Сообщений: 425
03.04.2011, 22:13 #3
Если подключаете
C++
1
#include <string.h>
- так и используйте стринги.
0
IrineK
Заблокирован
04.04.2011, 01:08 #4
Здесь пример на трехмерный динамический массив типа int размерность 5х2х2.
У вас тип и размерность другая, но техника обработки - будет та же.

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
#include <iostream>
#define N 5
using namespace std;
 
int main()
{   int*** a;
    int i,j,k;
    
    a = new int**[N];
    for(i=0;i<N;i++)    
        a[i] = new  int*[2];        
    for(i=0;i<N;i++)
        for(j=0;j<2;j++)
            a[i][j]= new int[2];
    for(i=0;i<N;i++)     
        for (j=0; j<2; j++)
            for (k=0; k<2; k++)
                a[i][j][k] = 5;
    
    for(i=0;i<N;i++)
    {   cout<<"\nArray "<<i<<"\n";
        for (j=0; j<2; j++)
        {   for (k=0; k<2; k++)
                cout<<a[i][j][k]<<" ";
            cout<<"\n";
        }
    }
 
    for(i=0;i<N;i++)    
        for (j=0; j<2; j++)         
            delete [ ] a[i][j];
    for(i=0;i<N;i++) delete []a[i];
        delete []a;
    
 
    cin.sync(); cin.get();
    return 0;
}
0
Deviaphan
04.04.2011, 07:44
  #5

Не по теме:

Цитата Сообщение от almazsr Посмотреть сообщение
и используйте стринги
Холодно ещё для стрингов.)

2
gGrn-7DA
мну довольно <(-__-)l
203 / 192 / 1
Регистрация: 17.01.2010
Сообщений: 2,392
Завершенные тесты: 1
04.04.2011, 16:04 #6
Цитата Сообщение от IrineK Посмотреть сообщение
но техника обработки - будет та же.
не совсем. цикл по к не требуется. так как сконсоли уже массив считывается, хотя конечно можно по разном реализовывать...

Добавлено через 32 секунды

Не по теме:

Deviaphan, Почему же? разве время года властно над ними???)

0
krylatka
0 / 0 / 0
Регистрация: 08.03.2011
Сообщений: 9
09.04.2011, 18:27  [ТС] #7
Цитата Сообщение от gGrn-7DA Посмотреть сообщение
C++
1
2
3
4
5
6
for(j=0; j<m; j++)
{
        mult[i][j]=new char[20];
        cout<<"s["<<j<<"]:";
        puts(mult[i][j]);
}
Замени кусок в функции Set_Mult
Все равно ошибки=(
error LNK2019: unresolved external symbol "public: __thiscall Mult::~Mult(void)" (??1Mult@@QAE@XZ) referenced in function _main
fatal error LNK1120: 1 unresolved externals

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
#include <iostream>
#include <string.h>
#include <conio.h>
#include <locale.h>
using namespace std;
#include "Mult.h"
 
Mult::Mult()
{
    ***mult=NULL;
}
 
void Mult::Set_Mult(int n)
{
    setlocale(LC_ALL, ".1251");
    int i, j, m;
    //--- Выделение памяти
    mult = new char**[n];
    for(i=0; i<n; i++)
    {
        cout<<"Введите количество элементов "<<i+1<<"-го множества: ";
        cin>>m;
        mult[i]=new char*[m];
        cout<<"Введите элементы "<<i+1<<"-го множества:\n";
        for(j=0; j<m; j++)
        {
                mult[i][j]=new char[20];
                cout<<"s["<<j<<"]:";
                gets(mult[i][j]);
        } 
 
            
    }
}
Вроде и должно работать, не понимаю, почему компилятор против.
0
vitaska
84 / 84 / 2
Регистрация: 04.02.2010
Сообщений: 162
09.04.2011, 18:50 #8
Цитата Сообщение от krylatka Посмотреть сообщение
***mult=NULL;
что значит эта строка в конструкторе? по видимому забыли указать тип!
C++
1
char ***mult=NULL;
VS2005 все компилится без ошибок
и еще бы в деструкторе память после себя убрать не мешало бы
0
krylatka
0 / 0 / 0
Регистрация: 08.03.2011
Сообщений: 9
12.04.2011, 17:02  [ТС] #9
Да нет, у меня и с char ***mult=NULL не компилируется.
0
sandora
12 / 12 / 0
Регистрация: 10.02.2011
Сообщений: 42
12.04.2011, 17:24 #10
C++
1
2
3
4
5
6
char**mult = new char*[n];
for(i=0; i < n; i++)
{
cin>>m;
mult[i] = new char[m];
}
а дальше ввод матрицы
0
krylatka
0 / 0 / 0
Регистрация: 08.03.2011
Сообщений: 9
17.04.2011, 16:09  [ТС] #11
Ребята, я уже замучилась. Может хоть кто-то поделиться рабочим кодом для ввода динамического массива? n строк, m столбцов, в каждой ячейке - 20-символьная строка. Пожаааалуйста! Можно не через new, только чтобы работало.
0
vitaska
84 / 84 / 2
Регистрация: 04.02.2010
Сообщений: 162
17.04.2011, 16:44 #12
вот накидал чуток разбирайся
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
#include <iostream>
#include <conio.h>
#include <iomanip>
 
using namespace std;
 
void printMatr( char *** const matr, int row, int col )
{
    for ( int i = 0; i < row; i++ ) { 
        for ( int j = 0; j < col; j++ ) { 
            cout << setw( 10 ) << matr[ i ][ j ];           
        }   
        cout << endl;
    } 
    cout << endl << endl;
}
 
void setMatr( char *** matr, int row, int col )
{
    for ( int i = 0; i < row; i++ ) 
        for ( int j = 0; j < col; j++ )
            cin >> matr[ i ][ j ];  
}
 
int main()
{
    int row = 3, col = 3;
    char *** matr = new char ** [row];
    for( int i = 0; i < row; i++ ){
        matr[ i ] = new char * [ col ];
        for ( int j = 0; j < col; j++ ) { 
            matr[ i ][ j ] = new char[ 20 ];
            
        } 
    }
    setMatr( matr, row, col );
    printMatr( matr, row, col );
 
    
    for( int i = 0; i < row; i++ ){
        for ( int j = 0; j < col; j++ )
            delete [] matr[ i ][ j ];
        delete [] matr[ i ];
    }
    delete [] matr;
 
    _getch();
    return 0;
}
1
krylatka
0 / 0 / 0
Регистрация: 08.03.2011
Сообщений: 9
17.04.2011, 19:58  [ТС] #13
Огромное-преогромное спасибо!!! Вы просто гений!)))
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.04.2011, 19:58
Привет! Вот еще темы с ответами:

Как вывести трехмерный динамический массив - C++
народ можете подсказать) написал код, где заполняется трехмерный массив так как мне необходимо, но при его выводе часть массива, вместо...

Добавление в массив типа char * одного элемента типа char - C++
Дан класс Строка, содержащий указатель на char - адрес динамически выделенной для размещения символов строки памяти и длину строки. Нужен...

Создать динамический трехмерный массив и функцию ввода его элементов - C++
с клавиатуры вводится размер трехмерного массива. Необходимо выделить под него память и с клавиатуры ввести значения элементов массива....

Как создать динамический трехмерный массив и заполнить его случайными значениями? - C++
Я больше по Java, но сейчас надо сделать пару задачек по плюсам. Одна из них звучит как-то так: Во-первых, меня смущает тот...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
17.04.2011, 19:58
Ответ Создать тему
Опции темы

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