|
|
|
| Смотрите, есть такой массив:
char *arr[] = {"вася", "петья", "игорь"}; // порядок, но это я его сам инициализировал. |
А как такой массив собрать автоматом? То есть вот пример:
Такая ситуация. Я итератором пробегаю по массиву и значения у меня имеет тип string, а мне нужно, чтобы после того как я пробежал, то в arr были все собранные значениями.
Вот пример грубой реализации:
char* arr[];
for(/* ляля тут значения, условия */)
{
arr[] = student["name"];
} |
И в итоге я получаю переменную, которая содержит имена всех собранных студентов, как в примере с инициализацией (в самом верху). Слышал про метод c_str(), но применить не пойму как.
Просто вот затупил совсем что-то.. | |
|
|
|
|
|
|
|
для: Belkin
(17.08.2012 в 23:26)
| | В случае char * автоматом ничего не получится... вам придется выделить память под каждый новый элемент, а потом не забыть её удалить. Причем выделить память лучше заранее.. char * arr[] - это фактически charr arr[][] - т.е. у вас массив строк, а каждая из строк сама является массивом символов char. Т.е. это даже не матрица, это массив переменной длины, элементы которого сами являются массивами переменной длины. Т.е. захотели положить в такую переменную строки, сначала сосчитали сколько их будет, потом выделили память под char **, затем вычислили сколько в первом элементе student["name"] символов выделили память под char * arr[0], перешли ко второй строке - тоже самое выделили память под char *arr[1]. Поработали со строками и в идем обратном порядке - возвращаем память сначала каждой строки, а в конце память под массив char**.
Программировать под C++ очень весело, дорого, времязатратно и код подвержен частым ошибкам. Зато вы контролируете каждый байт. Поэтому существуют более сложные реализации строк, с которыми бы и следовало бы работать... вот этот student["name"] откуда взялся и какой тип он имеет? Ведь в C++ довольно много типов строк, реализованных в виде классов (вы и сами можете ввести свой собственный тип строк), существует стандартный класс CString - вот он как раз и имеет метод c_str(), который в любой момент позволяет получить char *. Однако, вам возможно, работать на уровне char * вообще не нужно... Ведь CString или его аналоги позволяют манипулировать со строками более широкими и гибкими средствами, а главное сами заботятся об памяти (до определенного предела, конечно). | |
|
|
|
|
 4.6 Кб |
|
|
для: cheops
(18.08.2012 в 07:49)
| | Библиотека использовалась из STL - <string>.
Задача была создать телефонную книгу с возможностью вывод, добавления, удаления и поиска абонентов.
Дело в том, что есть метод, который создает меню. Он принимает параметр char* arr[], int count, то есть элементы меню и их количество.
И вот дошло дело до удаления, я хотел, чтобы выводился список студентов (как меню), то есть можно было выбрать кого-то и нажать для удаления, но для этого нужно было, чтобы этот список сформулировался, то есть превратился в такой вот массив.
Может как Вы сказали - не стоит использовать char* для пунктов меню, а какой-то другой вариант.
Мне главное, чтобы показали, как можно заполнить массив примерно таким видом.
Я сейчас прикрепил файл, с классом абоненты.
В main пропишите вот что
#include "phonebook.h"
int main()
{
setlocale(LC_ALL, "Russian");
Phonebook p;
return 0;
} |
Сильно не удивляйтесь за то, если увидите бред. Основные моменты прокомментировал.
Метод remove().
Программа полностью работает, кроме пунктов Удаление и Поиск. | |
|
|
|
|
|
|
|
для: Belkin
(18.08.2012 в 15:03)
| | Хм... а почему бы действительно не использовать тип string - создайте вектор строк или карту, как у вас и передавайте в функцию указатель или ссылку на неё. | |
|
|
|