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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.85
Alexem
0 / 0 / 0
Регистрация: 14.10.2012
Сообщений: 35
14.10.2012, 14:45     двумерный динамический массив типа char #1
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> 
#include <iomanip> 
#include <windows.h> 
using namespace std; 
 
void RussianMessage(const char *str) 
{ 
char *buf = new char[strlen(str) + 1]; 
CharToOemA(str, buf); 
cout << buf; 
delete[] buf; 
} 
char **AddStudents(char **list,int &n,char *str) 
{ 
int k=0,size; 
RussianMessage("Введите кол-во добавленных студентов: "); 
cin>>n; 
k+=n; 
for(int i=0;i<k;i++)    
        {
RussianMessage("Введите фамилию студента \n");
        cin>>str;
        list = new char *[i];
        for(int j=0;j<i;j++)
        list[j] = new char[strlen(str)+1];
-И вот вопрос, как мне тут дальше сделать так чтобы в двумерный динамический массив list записать посимвольно фамилию студента которое находится в сроке str.Пытался через функцию strcpy не получается программа слетает, а создать цыкл for и в нем сделать вот так list[//строка][//столбец]=str[a] где "а" будет увеличиваться движение по строке, это тоже не получается вылетает программа.Можете подсказать как мне записать в двумерный динамический массив list фамилию студента которая записана в строке str?
}
return list;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.10.2012, 14:45     двумерный динамический массив типа char
Посмотрите здесь:

C++ Трехмерный динамический массив типа char
Двумерный массив char[]; C++
Динамический двумерный массив char через new? C++
двумерный массив с char C++
Динамический массив из char C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
14.10.2012, 15:01     двумерный динамический массив типа char #2
Копируйте.
C++
1
strcpy(list[j], str);
Добавлено через 11 минут
И код весь покажите, где вылетает.
Alexem
0 / 0 / 0
Регистрация: 14.10.2012
Сообщений: 35
14.10.2012, 15:10  [ТС]     двумерный динамический массив типа char #3
Цитата Сообщение от alsav22 Посмотреть сообщение
Копируйте.
C++
1
strcpy(list[j], str);
Добавлено через 11 минут
И код весь покажите, где вылетает.
это файл main
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
#include <iostream>
#include <iomanip>
#include <conio.h>
#include <windows.h>
#include "lib.h"
using namespace std;
void main()
{
    char **list=0,str[100];
    RussianMessage("1.Добавление студентов в список \n");
    RussianMessage("2.Удаление студента из списка \n");
    RussianMessage("3.Модификация студента в списке \n");
    RussianMessage("4.Печать списка студентов \n");
    RussianMessage("5.Сортировка списка студентов \n");
    RussianMessage("6.Поиск студента \n");
    RussianMessage("7.Выход из программы \n");
    while(1)
    {
        int result,temp=0,n=0,b=0; 
        result= getch();
            switch(result)
            {
                case '1':
                    system("cls");
                    list =AddStudents(list, n, str);
                    break;
                case '2':
                    system("cls");
                    break;
                case '3':
                    system("cls");
                        break;
                case '4':
                    system("cls");
                    break;
                case '5':
                    system("cls");
                    break;
                case '6':   
                    system("cls");
                    break;
                case '7':
                    b++;
                    break;
            }
            if(b==1)
            {
                system("cls");
                break;
            }
    
        
    }
}
это файл прототипов
C++
1
2
char **AddStudents(char **list,int &n,char *str);
void RussianMessage(const char *s);
файл с функциями изначально в самом вопросе
вылетает программа тогда когда заходит в strcpy и после попытки первого копирования вылетает
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
14.10.2012, 15:23     двумерный динамический массив типа char #4
Почему у вас в реализации AddStudents() три параметра (1 пост), а в прототипе 4? Рабочую реализацию покажите.
Alexem
0 / 0 / 0
Регистрация: 14.10.2012
Сообщений: 35
14.10.2012, 15:28  [ТС]     двумерный динамический массив типа char #5
Цитата Сообщение от alsav22 Посмотреть сообщение
Почему у вас в реализации AddStudents() три параметра (1 пост), а в прототипе 4? Рабочую реализацию покажите.
Ну я уже исправил уже везде 3, это я просто ещё добавлял параметр но он оказался не нужным, но это все равно проблему не решает...
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
14.10.2012, 15:34     двумерный динамический массив типа char #6
Проблему не решает, но мне как код проверять, если даже не компилируется из-за разного количества параметров?
Alexem
0 / 0 / 0
Регистрация: 14.10.2012
Сообщений: 35
14.10.2012, 16:57  [ТС]     двумерный динамический массив типа char #7
Цитата Сообщение от alsav22 Посмотреть сообщение
Проблему не решает, но мне как код проверять, если даже не компилируется из-за разного количества параметров?
ну уже я убрал вот 3 параметра которые нужны
C++
1
char **AddStudents(char **list,int &n,char *str);
Добавлено через 41 минуту
Что никто не знает как тут мне помочь?

Добавлено через 33 минуты
ну помогите же кто-нибудь срочно нужно просто
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
14.10.2012, 17:13     двумерный динамический массив типа char #8
Код
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#include <iostream>
#include <iomanip>
#include <conio.h>
#include <windows.h>
//#include "lib.h"
using namespace std;
 
char **AddStudents(char **list, int &n, char *str);
void RussianMessage(const char *s);
//---------------------------------------------------------------------------
 
void RussianMessage(const char *str) 
 { 
    char *buf = new char[strlen(str) + 1]; 
    CharToOemA(str, buf); 
    cout << buf; 
    delete[] buf; 
 } 
 
 char** AddStudents(char **list, int &k, char *str) 
 { 
    int n = 0, size; 
    RussianMessage("Введите кол-во добавленных студентов: "); 
    cin >> n; 
    k += n; // увеличиваем количество студентов в списке
    
    char** temp = new char*[k]; // выделяем память под новое количество студентов
    
    if ( list != 0) // если список не пустой
    {
        for (int i = 0; i < k - n; i++) // копирование старого списка в новую память
                                       //  и освобождение памяти под старым списком
        {
            temp[i] = new char[strlen(list[i]) + 1];
            strcpy(temp[i], list[i]);
            delete [] list[i];
        }
        delete [] list;
    }
    
    list = temp; // list указывает на память под новым списком
    temp = 0;
    
    for(int i = k - n; i < k; i++) // добавляем студенов в список
    {
        RussianMessage("Введите фамилию студента \n");
        cin >> str;
            
        list[i] = new char[strlen(str) + 1];
        strcpy(list[i], str);
    }
    
 return list;
}
 
 
int main()
{
    char **list = 0, str[100];
    int k = 0; // количество студентов в списке
    
    while(1)
    {
    
    RussianMessage("1.Добавление студентов в список \n");
    RussianMessage("2.Удаление студента из списка \n");
    RussianMessage("3.Модификация студента в списке \n");
    RussianMessage("4.Печать списка студентов \n");
    RussianMessage("5.Сортировка списка студентов \n");
    RussianMessage("6.Поиск студента \n");
    RussianMessage("7.Выход из программы \n");
    
    int result, temp = 0, b = 0; 
    result = getch();
            switch(result)
            {
                case '1':
                {
                    system("cls");
                    list = AddStudents(list, k, str);
                    
                    //for (int i = 0; i < k; i++) // вывод списка
                        //cout << list[i] << endl;
                    
                    break;
                }
                
                case '2':
                    system("cls");
                    break;
                
                case '3':
                    system("cls");
                    break;
                
                case '4':
                    system("cls");
                    break;
                
                case '5':
                    system("cls");
                    break;
                
                case '6':   
                    system("cls");
                    break;
                
                case '7':
                    b++;
                    break;
            }
            
            if(b==1)
            {
                system("cls");
                break;
            }
     }
 
    system("pause");
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.10.2012, 17:46     двумерный динамический массив типа char
Еще ссылки по теме:

Аргумент типа char (*)[1000] несовместим с параметром типа char** C++
C++ Создать класс с 1 полем: динамический массив char
C++ Читать строку типа string из файла, разбить ее на массив слов типа char

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

Или воспользуйтесь поиском по форуму:
Alexem
0 / 0 / 0
Регистрация: 14.10.2012
Сообщений: 35
14.10.2012, 17:46  [ТС]     двумерный динамический массив типа char #9
Цитата Сообщение от alsav22 Посмотреть сообщение
Код
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#include <iostream>
#include <iomanip>
#include <conio.h>
#include <windows.h>
//#include "lib.h"
using namespace std;
 
char **AddStudents(char **list, int &n, char *str);
void RussianMessage(const char *s);
//---------------------------------------------------------------------------
 
void RussianMessage(const char *str) 
 { 
    char *buf = new char[strlen(str) + 1]; 
    CharToOemA(str, buf); 
    cout << buf; 
    delete[] buf; 
 } 
 
 char** AddStudents(char **list, int &k, char *str) 
 { 
    int n = 0, size; 
    RussianMessage("Введите кол-во добавленных студентов: "); 
    cin >> n; 
    k += n; // увеличиваем количество студентов в списке
    
    char** temp = new char*[k]; // выделяем память под новое количество студентов
    
    if ( list != 0) // если список не пустой
    {
        for (int i = 0; i < k - n; i++) // копирование старого списка в новую память
                                       //  и освобождение памяти под старым списком
        {
            temp[i] = new char[strlen(list[i]) + 1];
            strcpy(temp[i], list[i]);
            delete [] list[i];
        }
        delete [] list;
    }
    
    list = temp; // list указывает на память под новым списком
    temp = 0;
    
    for(int i = k - n; i < k; i++) // добавляем студенов в список
    {
        RussianMessage("Введите фамилию студента \n");
        cin >> str;
            
        list[i] = new char[strlen(str) + 1];
        strcpy(list[i], str);
    }
    
 return list;
}
 
 
int main()
{
    char **list = 0, str[100];
    int k = 0; // количество студентов в списке
    
    while(1)
    {
    
    RussianMessage("1.Добавление студентов в список \n");
    RussianMessage("2.Удаление студента из списка \n");
    RussianMessage("3.Модификация студента в списке \n");
    RussianMessage("4.Печать списка студентов \n");
    RussianMessage("5.Сортировка списка студентов \n");
    RussianMessage("6.Поиск студента \n");
    RussianMessage("7.Выход из программы \n");
    
    int result, temp = 0, b = 0; 
    result = getch();
            switch(result)
            {
                case '1':
                {
                    system("cls");
                    list = AddStudents(list, k, str);
                    
                    //for (int i = 0; i < k; i++) // вывод списка
                        //cout << list[i] << endl;
                    
                    break;
                }
                
                case '2':
                    system("cls");
                    break;
                
                case '3':
                    system("cls");
                    break;
                
                case '4':
                    system("cls");
                    break;
                
                case '5':
                    system("cls");
                    break;
                
                case '6':   
                    system("cls");
                    break;
                
                case '7':
                    b++;
                    break;
            }
            
            if(b==1)
            {
                system("cls");
                break;
            }
     }
 
    system("pause");
    return 0;
}
Спасибо большое!
Yandex
Объявления
14.10.2012, 17:46     двумерный динамический массив типа char
Ответ Создать тему
Опции темы

Текущее время: 04:26. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru