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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 26, средняя оценка - 4.92
Arderun
1 / 1 / 0
Регистрация: 12.09.2011
Сообщений: 17
#1

вектор string в масив указателей на char - C++

12.09.2011, 19:01. Просмотров 3573. Ответов 22
Метки нет (Все метки)

Доброго дня, комрады. Вот несколько дней как начал разбираться в С++ по 4-му вводному курсу липмана. наткнулся на задачку в общем-то тривиальную, но в определенном месте немного вывихнул мозг.
Задание:
Напишите программу читающую строки в вектор. Скопируйте этот вектор в массив указателей на тип char. Для каждого элемента вектора создайте новый символьный массив и скопируйте данные из элемента вектора в этот символьный массив. Затем поместите указатель на символьный массив в массив символьных указателей.

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
#include <iostream>  
#include <string> 
#include <vector> 
#include <bitset> 
#include <stddef.h>  
#include <cstring>   
using std::bitset;
using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;
 
int main()
{ 
    char * himas[10];
    int j,D;
    string V;
    vector<string> liter;
string a ;
for(int i=0; i!=10; ++i)
{cin >> a ;
liter[i].push_back(a);
}
for(int i=0; i!=10; ++i)
{
j=liter[i].size();
V=liter[i];
for(int k=0; k!=j; ++k)               // <-
{**(himas+k)=V[k];                  //  <-
}
}
for(int i=0; i!=10; ++i)
{cout << himas[i] << endl;
}
return 0;
}
не знаю всю ли пунктуацию почистил, но запнулся собсвтенно на записи в указатель на char строки.
Вроде как индексированием на двумерный массив пользоваться не могу так как многомерные массивы собственно следующая глава.
Заранее спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.09.2011, 19:01
Здравствуйте! Я подобрал для вас темы с ответами на вопрос вектор string в масив указателей на char (C++):

Вектор строк и массив указателей на тип char - C++
Помогите, пожалуйста, с одной задачей. Сижу голову ломаю. Никак не могу понять почему эта ошибка выскакивает. Напишите программу,...

Объяснить различия в работе указателей на целое число и указателей на const char (строки в стиле Си) - C++
Уважаемые программисты, возникло несколько вопросов касательно указателей. Почему при выводе указателя на int нужна звёздочка (*), а...

Создать специфицированный шаблон функции, принимающей массив указателей на char и количество самих указателей - C++
Задача: создать специфицированный шаблон функции, принимающей массив указателей на char и количество самих указателей. Вернуть адрес...

Различия указателей char* от указателей других типов - C++
Помогите пожалуйста разобраться! Прочитал раздел про указатели и даже вроде бы понял. Что касается указателей на тип int. Но что...

есть массив char. есть строка string. как присвоить значению string-a значение char-a? - C++
есть массив char. есть строка string. как присвоить значению string-a значение char-a?

array char* to char* (значения массива указателей в один указатель) - C++
Как сложить(или вывести в формате char*) все значения массива указателей(char *) воедино, то есть сложить строки и назначить результату...

22
ForEveR
В астрале
Эксперт С++
7979 / 4738 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
15.09.2011, 10:52 #16
easybudda, Кхм. Странно. Видать она не стандартная. У меня на gcc 4.5+ компилилось...

http://ru.wikipedia.org/wiki/Strdup Да. Не сразу это прочел.
0
easybudda
Модератор
Эксперт CЭксперт С++
9683 / 5633 / 956
Регистрация: 25.07.2009
Сообщений: 10,811
15.09.2011, 11:16 #17
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
ForEveR, так сама-то по себе функция strdup() для компилятора не новость, то есть код
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
int main(void){
    const char * cptr = "hello world";
    char * sptr = strdup(cptr);
    if ( ! sptr ){
        perror("strdup");
        exit(1);
    }
    *sptr = 'H';
 
    printf("%s\n%s\n", cptr, sptr);
 
    exit(0);
}
прекрасным образом отработает
Код
C:\cpp\strings>teststrdup.exe
hello world
Hello world
А вот внутри лямбда-функции её не видно. О, как!
3
ForEveR
В астрале
Эксперт С++
7979 / 4738 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
15.09.2011, 11:45 #18
easybudda, Вау. Спасибо. Буду знать. Хотя интересно с какого это так.
0
grizlik78
Эксперт С++
1964 / 1457 / 119
Регистрация: 29.05.2011
Сообщений: 3,016
15.09.2011, 14:03 #19
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Функция strdup не включена в стандарт C99, но включена в POSIX. MinGW при использовании -std=c++0x или -std=c99 устанавливает макрос __STRICT_ANSI__, в результате strdup и ещё некоторые функции остаются не объявленными. Чтобы скомпилировать программу с их использованием можно использовать -std=gnu++0x или -std=gnu99 соответственно.
4
ForEveR
В астрале
Эксперт С++
7979 / 4738 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
15.09.2011, 14:40 #20
grizlik78, я c -std=c++0x компилил через gcc...
0
grizlik78
Эксперт С++
1964 / 1457 / 119
Регистрация: 29.05.2011
Сообщений: 3,016
15.09.2011, 14:41 #21
ForEveR, в линуксе, видимо? Я так понимаю, что в linux оно есть именно из-за POSIX.
2
ForEveR
В астрале
Эксперт С++
7979 / 4738 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
15.09.2011, 14:49 #22
grizlik78, Понятно. Спасибо.
0
Сыроежка
Заблокирован
15.09.2011, 17:56 #23
Цитата Сообщение от ForEveR Посмотреть сообщение
Сыроежка, Так вы ж любитель стандарта, но не понимаете что в нем написано? Оригинально.

Вектор создается в функции. Удаляется он после выхода из функции. До тех пор строки корректны. Так же как и указатели на них, если данный объект строки не был изменен в процессе.

Докажите мне обратное, если сможете. Пример кода, пример выполнения кода (показывающий вашу точку зрения), пункт стандарта, в котором это указано. Иначе - лесом.
Вопрос не в том, что именно в вашей функции не произойдет аварийного завершения, а вопрос в том, что всегда надо грамотно писать код, даже в частных примерах демонстрировать правильное использование идиом программирования. Ведь по существу каждый частный пример предназначен для демонстрации общего подхода.
0
15.09.2011, 17:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.09.2011, 17:56
Привет! Вот еще темы с ответами:

Массив из указателей на масив из указателей на массив из int) - C++
Доброго времени суток! Возникла проблема - как на C++ создать массив из указателей на массив из указателей на int? То есть массив из n...

Передача в функцию char*([Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings]) - C++
Почему компилятор на это матерится? ObjA.Show(&quot;A&quot;); deprecated conversion from string constant to 'char*' #include &lt;iostream&gt; ...

Строка: чем отличается строки string, char, char*? - C++
Помогите разобраться,совсем плохо идёт,чем отличается строки string,char,char* И если можно пару примеров Буду весьма признательна

В чем отличие двумерного массива типа char от массива указателей на char? - C++
В чем отличие двумерного массива типа char и массива указателей на char ?


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

Или воспользуйтесь поиском по форуму:
23
Ответ Создать тему
Опции темы

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