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

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

Войти
Регистрация
Восстановить пароль
 
rar14
28 / 22 / 1
Регистрация: 14.04.2009
Сообщений: 448
#1

Создать матрицу элементы которой являются строки - C++

18.04.2009, 16:01. Просмотров 763. Ответов 11
Метки нет (Все метки)

В предыдущем задании надо было создать матрицу N на M элементы которой целые числа. А вот теперь нужна матрица элементы которой строки. Вот код создания динамического двумерного массива и его удаления. Как правильно переписать, что бы можно было в ячейках хранить строки? Посоветуйте.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    int **matrix;
    matrix = new int *[N];
    if (!matrix) {
        cout << "Error: dynamic array is not created" << "\n";
        exit(0);
    }
    for (i = 0; i < N; i++) {
        matrix[i] = new int [M];
        if (!matrix[i]) {
            cout << "Error: dynamic array is not created" << "\n";
            exit(0);
        }
    }
 
    for (i = 0; i < N; i++) delete matrix[i];
    delete [] matrix;
Надо полагать, что матрица, которая хранит строки, должна быть, на самом деле, трехмерной, т.к. строка - это массив.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.04.2009, 16:01     Создать матрицу элементы которой являются строки
Посмотрите здесь:

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

Зеркально отразить матрицу относительно главной диагонали и найти строки, элементы которой образуют последовательность - C++
Задана матрица A(n,n). Зеркально отразить ее относительно главной диагонали. В преобразованной матрице найти строки, элементы которой ...

Создать матрицу B, каждый элемент которой равен произведению соответствующего элемента А на номер его строки - C++
Добрый день уважаемые форумчане! Помогите пожалуйста с решением задачи в Visual Studio 2008, я не представляю как решить. Искала по...

Можно ли в С++ создать матрицу, строки которой имеют разный тип (например, 1-я строка - bool, 2-я - char)? - C++
:p Привет всем. У меня такой вот &quot;тупой&quot; вопрос. Можно ли в С++ создать матрицу например 2 на 8 где первая строка имеет тип bool а вторая...

Построить матрицу, строками которой являются соответственно векторы - C++
Даны векторы X={x1, x2, x3}, Y={у1, у2, у3} и Z={z1, z2, z3}. Построить матрицу A(3,3), строками которой являются соответственно векторы...

Составить квадратную матрицу, элементами которой являются кубы чисел от 1 до 25 - C++
Задание: составить квадратную матрицу элементами которой являются кубы чисел от 1-25. У меня выходит 1 1 1 1 1 8 8 8 8 8 27 27...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ISergey
Maniac
Эксперт С++
1372 / 883 / 52
Регистрация: 02.01.2009
Сообщений: 2,652
Записей в блоге: 1
18.04.2009, 16:17     Создать матрицу элементы которой являются строки #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
#include <iostream>
using namespace std;
int main()
{
    char *str[] = {"Simple","text","bla-bla"};
    cout<<str[0]<<endl
        <<str[1]<<endl
        <<str[2]<<endl;
 
    char **st = new char*[2];
    st[0] = new char[7];
    st[1] = new char[5];
 
    strcpy(st[0],"String");
    strcpy(st[1],"Test");
 
    cout<<st[0]<<endl
        <<st[1]<<endl;
 
    delete[] st[0];
    delete[] st[1];
    delete[] st;
 
    return 0;
}
PS. new при ошибке сгенерирует исключение std::bad_alloc

Надо полагать, что матрица, которая хранит строки, должна быть, на самом деле, трехмерной, т.к. строка - это массив.
И зачем вам это надо
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
    char ***st = new char**[2];
    st[0] = new char*[2];
    st[1] = new char*[2];
    //...................
    st[0][0] = new char[7];
    st[0][1] = new char[5];
    //......................
    strcpy(st[0][0],"String");
    strcpy(st[0][1],"Test");
 
    cout<<st[0][0]<<endl
        <<st[0][1]<<endl;
    //..Куча делейтов...
rar14
28 / 22 / 1
Регистрация: 14.04.2009
Сообщений: 448
18.04.2009, 16:48  [ТС]     Создать матрицу элементы которой являются строки #3
А вот так нельзя? Посмотрите пожалуйста.

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
#include <iostream.h>
 
int main() {
 
    int N = 2, M =3;
    int i, j;
 
    char ***matrix;
    matrix = new char **[N];
    if (!matrix) return 0;
    for (i = 0; i < N; i++) {
        matrix[i] = new char *[M];
        if (!matrix[i]) return 0;
    }
 
    for (i = 0; i < N; i++) {
        for (j = 0; j < M; j++) {
             matrix[i][j] = "This is string";
        }
    }
 
        for (i = 0; i < N; i++) {
        for (j = 0; j < M; j++) {
             cout << matrix[i][j] << "\n";
        }
    }
 
 
 
    for (i = 0; i < N; i++) delete matrix[i];
    delete [] matrix;
 
 
    return 0;
}
И еще вопрос. Как сделать конкатенацию строки с целым числом. То есть, мне надо:
C++
1
2
3
4
5
6
    for (i = 0; i < N; i++) {
        for (j = 0; j < M; j++) {
             matrix[i][j] = "This is string - row i col j"; // Что бы сдесь строка превратилась,
                                                                   // скажем, в "This is string  - row 1 col 2"
        }
    }
ISergey
Maniac
Эксперт С++
1372 / 883 / 52
Регистрация: 02.01.2009
Сообщений: 2,652
Записей в блоге: 1
18.04.2009, 17:07     Создать матрицу элементы которой являются строки #4
Вот так
C++
1
matrix[i][j] = "This is string";
нельзя.
1. память под строку кто выделять будет.
2. "С" строки нужно копировать через strcpy.

можно так сделать
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
#include <iostream>
#include <string>
 
int main()
{
 
    const int r = 2;
    const int c = 3;
 
 
    std::string **arr = new std::string*[r];
    for(int i = 0; i < r; ++i)
        arr[i] = new std::string[c];
 
    for(int i = 0; i < r; ++i) 
    {
        for(int j = 0; j < c; ++j) 
        {
            char buff[16];
            arr[i][j] = std::string("This is string Row: ") 
                + std::string(itoa(i,buff,10))
                + std::string(" Col: ")
                + std::string(itoa(j,buff,10));
        }
    }
 
 
    for(int i = 0; i < r; ++i) 
    {
        for(int j = 0; j < c; ++j) 
        {
            std::cout<<arr[i][j]<<std::endl;
        }
    }
 
    for (int i = 0; i < r; i++) 
        delete[] arr[i];
    delete [] arr;
 
    return 0;
}
rar14
28 / 22 / 1
Регистрация: 14.04.2009
Сообщений: 448
18.04.2009, 17:09  [ТС]     Создать матрицу элементы которой являются строки #5
Мне нужно по меньше всяких наворов. Пока стандартным C++ писать. Можно мой код исправить.

Вот так?
C++
1
2
3
4
5
6
    for (i = 0; i < N; i++) {
        for (j = 0; j < M; j++) {
             char* str = "This is string";
             matrix[i][j] = str;
        }
    }
ISergey
Maniac
Эксперт С++
1372 / 883 / 52
Регистрация: 02.01.2009
Сообщений: 2,652
Записей в блоге: 1
18.04.2009, 17:15     Создать матрицу элементы которой являются строки #6
Он и так на стандартном С++ написан.

C++
1
2
char* str = "This is string";
matrix[i][j] = str;
нужно так
C++
1
2
3
char* str = "This is string";
matrix[i][j] = new char[strlen(str)+1];
strcpy(matrix[i][j],str)
;
rar14
28 / 22 / 1
Регистрация: 14.04.2009
Сообщений: 448
18.04.2009, 17:31  [ТС]     Создать матрицу элементы которой являются строки #7
Цитата Сообщение от ISergey Посмотреть сообщение
нужно так
А у меня работает нормально, мой предыдущий код.
ISergey
Maniac
Эксперт С++
1372 / 883 / 52
Регистрация: 02.01.2009
Сообщений: 2,652
Записей в блоге: 1
18.04.2009, 17:52     Создать матрицу элементы которой являются строки #8
он то работает но так делать нельзя.
Посмотри такой код поймешь
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
using namespace std;
int main()
{
    char *p;
 
    //new block
    {
        char *str = new char[7];
        strcpy(str,"string");
 
        p = str;//p указывает на str ! но не копирует строку !
 
        cout<<p<<endl;//выведет "string"
 
        delete[] str;
    }//str deleted;
 
    cout<<p<<endl;//здесь корей всего мусор будет
    return 0;
}
В вашем случае засада
C++
1
2
3
4
5
6
 for (j = 0; j < M; j++) {
                         char* str = "This is string";
             matrix[i][j] = str;//matrix[i][j] указывает на str ! но не копирует строку !
        }//здесь компилятор должен удалить str
//str уже нету, но тот адресс куда ссылается matrix[i][j] возможно 
//еще небыл перезаписан проетому ваш код какбы работает правильно
rar14
28 / 22 / 1
Регистрация: 14.04.2009
Сообщений: 448
18.04.2009, 18:15  [ТС]     Создать матрицу элементы которой являются строки #9
Посмотрите пожалуйста. Вот, переписал:

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
#include <iostream.h>
#include <string.h>
 
 
int main() {
 
    int N = 2, M =3;
    int i, j;
 
    char ***matrix = new char **[N];
    if (!matrix) return 0;
 
    for (i = 0; i < N; i++) {
        matrix[i] = new char *[M];
        if (!matrix[i]) return 0;
    }
 
    for (i = 0; i < N; i++)
    for (j = 0; j < M; j++) {
        char* str = "This is string";
        matrix[i][j] = new char[strlen(str)+1];
        strcpy(matrix[i][j],str);
    }
 
 
    for (i = 0; i < N; i++)
    for (j = 0; j < M; j++) cout << matrix[i][j] << "\n";
 
 
 
    for (i = 0; i < N; i++) delete [] matrix[i];
    delete [] matrix;
 
 
    return 0;
}
ISergey
Maniac
Эксперт С++
1372 / 883 / 52
Регистрация: 02.01.2009
Сообщений: 2,652
Записей в блоге: 1
18.04.2009, 18:21     Создать матрицу элементы которой являются строки #10
Один момент упустили
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
int main() 
{
    int N = 2, M = 3;
    int i, j;
 
    char ***matrix = new char **[N];
 
    if (!matrix) return 0;
 
    for (i = 0; i < N; i++) {
        matrix[i] = new char *[M];
        if (!matrix[i]) return 0;
    }
 
    for (i = 0; i < N; i++)
        for (j = 0; j < M; j++) 
        {
            char* str = "This is string";
            matrix[i][j] = new char[strlen(str)+1];
            strcpy(matrix[i][j],str);
        }
 
 
    for (i = 0; i < N; i++)
        for (j = 0; j < M; j++) cout << matrix[i][j] << "\n";
 
 
    //сначала нужно удалить то что под строки было выделено
 
    for (i = 0; i < N; i++)
        for (j = 0; j < M; j++) 
                delete[] matrix[i][j];
 
    for (i = 0; i < N; i++)
        delete [] matrix[i];
    delete [] matrix;
 
 
    return 0;
}
rar14
28 / 22 / 1
Регистрация: 14.04.2009
Сообщений: 448
18.04.2009, 18:25  [ТС]     Создать матрицу элементы которой являются строки #11
Ага, спасибо. Буду дальше делать.

А скажите пожалуйста, а если я не удаляю что-то по завершению программы оно так и остается в памяти, или компилятор сам все подчистит?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.04.2009, 18:36     Создать матрицу элементы которой являются строки
Еще ссылки по теме:

Получить действительную квадратную матрицу порядка 8, элементами которой являются числа a1,., a64 - C++
Нужно заполнить матрицу &quot;змейкой&quot;, начиная с правого верхнего угла. Код уже есть, но постоянно выскакивает ошибка, которую самостоятельно я...

Получить квадратную матрицу порядка n, элементами которой являются числа b1,...,bn^n., расположенные по схеме - C++
1) Дано последовательность чисел b1,...bn . Получить квадратную матрицу порядка n, элементами которой являются числа b1,...,bn^n. ,...

Получить целочисленную матрицу порядка 7, элементами которой являются числа 1, 2, …, 49, расположенные в ней по спирали. - C++
помогите на с++ прогу написать получить целочисленную квадратую матрицу порядка 7,элементами которого являються числа 1,2,...,49...

Обработка массива (построить новую «сглаженную» матрицу, значения каждого элемента которой являются:) - C++
По матрице с действительными элементами построить новую «сглаженную» матрицу, значения каждого элемента которой являются: среднее...


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

Или воспользуйтесь поиском по форуму:
ISergey
Maniac
Эксперт С++
1372 / 883 / 52
Регистрация: 02.01.2009
Сообщений: 2,652
Записей в блоге: 1
18.04.2009, 18:36     Создать матрицу элементы которой являются строки #12
Цитата Сообщение от rar14 Посмотреть сообщение
А скажите пожалуйста, а если я не удаляю что-то по завершению программы оно так и остается в памяти
Нет. ОС должна все потом почистить.
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
int main() 
{
    char *arr = new char[1024*1024*1024];//Берем 1гб памяти
    //не удалям (в диспетчере задач можно посмотреть)
    system("pause");
    return 0;
}
//ОС после завершения работы программы все почистила.
Но этой штукой лучше не злоупотреблять.
Yandex
Объявления
18.04.2009, 18:36     Создать матрицу элементы которой являются строки
Ответ Создать тему
Опции темы

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