|
Модераторы: Daevaorn |
|
box |
|
|||
Опытный Профиль Группа: Участник Сообщений: 506 Регистрация: 27.2.2007 Репутация: нет Всего: 0 |
всем привет!
как перегнать из контейнера map в массив char*
|
|||
|
||||
baldina |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
а где у вас массив то?
что-то типа http://ideone.com/zyEk7B а зачем вам массив char*? c vector<string> попроще будет Добавлено через 3 минуты и 14 секунд сравните: http://ideone.com/MJ81EM |
|||
|
||||
box |
|
|||
Опытный Профиль Группа: Участник Сообщений: 506 Регистрация: 27.2.2007 Репутация: нет Всего: 0 |
надо именно в массив ибо menu от ncurces работает только с массивами char*
|
|||
|
||||
box |
|
|||
Опытный Профиль Группа: Участник Сообщений: 506 Регистрация: 27.2.2007 Репутация: нет Всего: 0 |
а как добавить нуль терминатор \0 в конце каждого choices[k] и NULL в конце массива, надо привести массив к такому виду:
|
|||
|
||||
baldina |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
0 в конце строк есть, а 0 в массив добавьте вручную (сделайте массив на один больше)
|
|||
|
||||
box |
|
|||
Опытный Профиль Группа: Участник Сообщений: 506 Регистрация: 27.2.2007 Репутация: нет Всего: 0 |
ситуация изменилась, теперь надо из вектора переложить все в const char* testarray[1000]
пробую так :
но получаю при компиляции: In file included from /usr/include/c++/4.7/unordered_map:41:0, from suric.cpp:12: /usr/include/c++/4.7/bits/stl_algobase.h: In instantiation of ‘static _OI std::__copy_move<false, false, std::random_access_iterator_tag>::__copy_m(_II, _II, _OI) [with _II = std::pair<std::basic_string<char>, long unsigned int>*; _OI = const char**]’: /usr/include/c++/4.7/bits/stl_algobase.h:384:70: required from ‘_OI std::__copy_move_a(_II, _II, _OI) [with bool _IsMove = false; _II = std::pair<std::basic_string<char>, long unsigned int>*; _OI = const char**]’ /usr/include/c++/4.7/bits/stl_algobase.h:422:39: required from ‘_OI std::__copy_move_a2(_II, _II, _OI) [with bool _IsMove = false; _II = __gnu_cxx::__normal_iterator<std::pair<std::basic_string<char>, long unsigned int>*, std::vector<std::pair<std::basic_string<char>, long unsigned int> > >; _OI = const char**]’ /usr/include/c++/4.7/bits/stl_algobase.h:454:18: required from ‘_OI std::copy(_II, _II, _OI) [with _II = __gnu_cxx::__normal_iterator<std::pair<std::basic_string<char>, long unsigned int>*, std::vector<std::pair<std::basic_string<char>, long unsigned int> > >; _OI = const char**]’ suric.cpp:770:41: required from here /usr/include/c++/4.7/bits/stl_algobase.h:329:8: error: cannot convert ‘std::pair<std::basic_string<char>, long unsigned int>’ to ‘const char*’ in assignment |
|||
|
||||
baldina |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
||||
|
||||
box |
|
|||
Опытный Профиль Группа: Участник Сообщений: 506 Регистрация: 27.2.2007 Репутация: нет Всего: 0 |
в векторе следующие:
|
|||
|
||||
rudolfninja |
|
|||
Опытный Профиль Группа: Участник Сообщений: 341 Регистрация: 19.2.2013 Где: г. Минск Репутация: 1 Всего: 6 |
Ну так у вас в веторе пары значений <строка - число>, а вы хотите это все закинуть в const char[]. Что именно из этого вектора вам надо закинуть в массив const char?
Если вы хотите сделать в массиве такую же пару, только в виде строки, типа "строка - число", а потом поместить это в массив, то вам надо сначала эту пару представить в виде строки, а затем поместить ее в массив. Это сообщение отредактировал(а) rudolfninja - 31.3.2015, 18:21 |
|||
|
||||
box |
|
|||
Опытный Профиль Группа: Участник Сообщений: 506 Регистрация: 27.2.2007 Репутация: нет Всего: 0 |
ну да, именно число|строка надо поместить в массив testarray[i] = "число|строка"
|
|||
|
||||
rudolfninja |
|
|||
Опытный Профиль Группа: Участник Сообщений: 341 Регистрация: 19.2.2013 Где: г. Минск Репутация: 1 Всего: 6 |
Понятно, тогда, я бы написал функцию, которая перегоняет пару в строку. Один из вариантов:
Использование этой функции простое: проходите по вектору, получаете элемент, передаете его в эту функцию, а на выходе получаете его строковое представление. Вот если вы хотите, чтоб у вас элементом итогового массива была строка, а не символ, то вам надо двумерный массив char'ов или можно сделать вектор из std::string. |
|||
|
||||
box |
|
|||
Опытный Профиль Группа: Участник Сообщений: 506 Регистрация: 27.2.2007 Репутация: нет Всего: 0 |
а вы считаете что не надо очищать ss перед началом работы с следующим эллементом ?
|
|||
|
||||
rudolfninja |
|
|||
Опытный Профиль Группа: Участник Сообщений: 341 Регистрация: 19.2.2013 Где: г. Минск Репутация: 1 Всего: 6 |
Считаю, что нет. Потому что один вызов функции у вас будет для одного элемента. ss - локальная и не статическая переменная функции. Это значит, что по выходу из функции для нее будет вызыван деструктор, сам поток будет очищен, а переменная удалена из памяти.
Когда мы войдем в функцию для следующего элемента, то эта ss создастся заново с помощью конструктора по умолчанию и будет пустой. Ну это в теории так =) Это сообщение отредактировал(а) rudolfninja - 31.3.2015, 19:12 |
|||
|
||||
box |
|
|||
Опытный Профиль Группа: Участник Сообщений: 506 Регистрация: 27.2.2007 Репутация: нет Всего: 0 |
ясно
если я правельно понял то делаем так:
а как же поместить строку в const char* |
|||
|
||||
rudolfninja |
|
||||
Опытный Профиль Группа: Участник Сообщений: 341 Регистрация: 19.2.2013 Где: г. Минск Репутация: 1 Всего: 6 |
Да, выправильно поняли, все именно так и будет.
Вы понимаете, что в строке const char у вас не будет возможности получить отдельную пару просто указав ее индекс? У вас будет массив символов, образующих новую последовательность. И обратившись подобным образом
вы получите один символ, а не строку. Если вам действительно нужна строка const char, в которой, допустим, все полученный пары разделены пробелами, то можно использовать такой код:
Это сообщение отредактировал(а) rudolfninja - 31.3.2015, 20:07 |
||||
|
|||||
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |