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

Динамический массив строк - C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.88
Krist_ALL
 Аватар для Krist_ALL
9 / 9 / 0
Регистрация: 01.02.2010
Сообщений: 317
19.05.2010, 00:31     Динамический массив строк #1
Мне нужно считать строки из файла но я не знаю сколько будет строк! и занести их в массив указателей на строки. чтобы было так

*a[] = {"Первая строка",
"Вторая строка"};

Сколько строк я не знаю. Про динамическое выделение памяти знаю но как его сюда приделать не знаю)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
19.05.2010, 06:18     Динамический массив строк #2
сначала прочитать строку, добавить её в список
когда список построен, посчитать элементы
создать динамический массив указателей char **a
C
1
a = (char **) calloc(количество, sizeof(char *));
перенести указатели из списка в динамический массив (берётся каждый узел списка и его указатель на строку (тоже динамическую) присваивается a[i])
потом нужно сам список удалить из памяти, но при этом освобождать только сами узлы

должно остаться: массив указателей a, в нём указатели на строки, количество известное

при завершении нужно каждую строку в массиве указателей освободить, а потом уже сам массив a освободить
Krist_ALL
 Аватар для Krist_ALL
9 / 9 / 0
Регистрация: 01.02.2010
Сообщений: 317
19.05.2010, 17:24  [ТС]     Динамический массив строк #3
сначала прочитать строку, добавить её в список
В какой список?

1 a = (char **) calloc(количество, sizeof(char *));
эта строчка для меня очень страшная) и не понятная. ОСОбенно calloc - мне кажется это устаревшее чтото. new везде же. мне нада с++.

Узел списка
это что еще такое?

Добавлено через 4 часа 43 минуты
up.........
insideone
Модератор
Автор FAQ
 Аватар для insideone
3630 / 908 / 48
Регистрация: 10.01.2010
Сообщений: 2,446
20.05.2010, 01:14     Динамический массив строк #4
Krist_ALL, заранее нельзя выделить память под непойми что, либо пробегитесь по всему файлу и посчитайте количество строк (через getline или ещё как, тут не особо знаю) и выделите массив указателей, а далее их уже будете заполнять. Или же считывайте в большой двумерный массив который точно вместит чтобы не было в файле, а потом копируйте в такой который не будет содержать пустых строк. А вообще лучше первой строкой в файле делать пометку сколько в нем строк и дальше все становится очень просто
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
20.05.2010, 02:37     Динамический массив строк #5
Цитата Сообщение от Krist_ALL
эта строчка для меня очень страшная) и не понятная. ОСОбенно calloc - мне кажется это устаревшее чтото. new везде же. мне нада с++.
не, тогда тебе нужен вектор строк (string которые), без выделений памяти (они сами выделяют)
Krist_ALL
 Аватар для Krist_ALL
9 / 9 / 0
Регистрация: 01.02.2010
Сообщений: 317
20.05.2010, 10:24  [ТС]     Динамический массив строк #6
а мне кажется будет гуд елси использовать структуры динамические с единственным поле string.

Легкое выделение памяти...
что скажите?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.05.2010, 10:41     Динамический массив строк
Еще ссылки по теме:

C++ Создать двухмерный динамический массив строк
C++ Как создать динамический массив строк?
C++ Сформировать динамический массив, состоящий из динамических строк
Класс динамический массив строк C++
Двумерный динамический массив строк C++

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

Или воспользуйтесь поиском по форуму:
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
20.05.2010, 10:41     Динамический массив строк #7
вектор и так использует выделение памяти
Yandex
Объявления
20.05.2010, 10:41     Динамический массив строк
Ответ Создать тему
Опции темы

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