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

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

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

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

03.04.2011, 21:48. Просмотров 2147. Ответов 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.04.2011, 21:48     Трехмерный динамический массив типа char
Посмотрите здесь:

Создать динамический трехмерный массив и функцию ввода его элементов C++
двумерный динамический массив типа char C++
Динамический двумерный массив char через new? C++
C++ Трехмерный динамический массив
Динамический массив из char C++
C++ Создать класс с 1 полем: динамический массив char
Как вывести трехмерный динамический массив C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gGrn-7DA
мну довольно <(-__-)l
203 / 192 / 1
Регистрация: 17.01.2010
Сообщений: 2,391
Завершенные тесты: 1
03.04.2011, 21:52     Трехмерный динамический массив типа char #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
almazsr
232 / 169 / 7
Регистрация: 13.11.2010
Сообщений: 425
03.04.2011, 22:13     Трехмерный динамический массив типа char #3
Если подключаете
C++
1
#include <string.h>
- так и используйте стринги.
IrineK
Заблокирован
04.04.2011, 01:08     Трехмерный динамический массив типа char #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;
}
Deviaphan
04.04.2011, 07:44
  #5

Не по теме:

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

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

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

Не по теме:

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

krylatka
0 / 0 / 0
Регистрация: 08.03.2011
Сообщений: 9
09.04.2011, 18:27  [ТС]     Трехмерный динамический массив типа char #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]);
        } 
 
            
    }
}
Вроде и должно работать, не понимаю, почему компилятор против.
vitaska
84 / 84 / 2
Регистрация: 04.02.2010
Сообщений: 162
09.04.2011, 18:50     Трехмерный динамический массив типа char #8
Цитата Сообщение от krylatka Посмотреть сообщение
***mult=NULL;
что значит эта строка в конструкторе? по видимому забыли указать тип!
C++
1
char ***mult=NULL;
VS2005 все компилится без ошибок
и еще бы в деструкторе память после себя убрать не мешало бы
krylatka
0 / 0 / 0
Регистрация: 08.03.2011
Сообщений: 9
12.04.2011, 17:02  [ТС]     Трехмерный динамический массив типа char #9
Да нет, у меня и с char ***mult=NULL не компилируется.
sandora
12 / 12 / 0
Регистрация: 10.02.2011
Сообщений: 42
12.04.2011, 17:24     Трехмерный динамический массив типа char #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];
}
а дальше ввод матрицы
krylatka
0 / 0 / 0
Регистрация: 08.03.2011
Сообщений: 9
17.04.2011, 16:09  [ТС]     Трехмерный динамический массив типа char #11
Ребята, я уже замучилась. Может хоть кто-то поделиться рабочим кодом для ввода динамического массива? n строк, m столбцов, в каждой ячейке - 20-символьная строка. Пожаааалуйста! Можно не через new, только чтобы работало.
vitaska
84 / 84 / 2
Регистрация: 04.02.2010
Сообщений: 162
17.04.2011, 16:44     Трехмерный динамический массив типа char #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;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.04.2011, 19:58     Трехмерный динамический массив типа char
Еще ссылки по теме:

C++ Трехмерный массив char
C++ Как создать динамический трехмерный массив и заполнить его случайными значениями?
Заполнить и вывести трехмерный динамический массив C++
Как переделать динамический массив int в char? C++
Динамический массив типа void C++

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

Или воспользуйтесь поиском по форуму:
krylatka
0 / 0 / 0
Регистрация: 08.03.2011
Сообщений: 9
17.04.2011, 19:58  [ТС]     Трехмерный динамический массив типа char #13
Огромное-преогромное спасибо!!! Вы просто гений!)))
Yandex
Объявления
17.04.2011, 19:58     Трехмерный динамический массив типа char
Ответ Создать тему
Опции темы

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