Форум программистов
 
О проблемах с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 08.12.2010, 08:46   #11
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Цитата:
например я могу анализировать символы некоторой строки1 и те из них ,которые мне понравятся - загонять в строку2 . Заранее размер 2-ой строки я не знаю - она может оказаться очень большой - поэтому перед тем как добавить в неё понравившийся символ я увеличиваю её размерность на "1"
Это называется контейнер. В C++ есть STL - там набор стандартных контейнеров. Если нужно именно Си - никто не запрещает написать свой контейнер, который, кстати говоря, можно сделать для любого типа данных
Если не хотите постоянно заново выделять память для всех элементов - можно использовать связанный список - тогда элементы будут находиться в произвольном месте памяти (а не целым куском), соответственно для добавления одного элемента надо выделить память только для него, а остальные элементы остаются на своих местах
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария

Последний раз редактировалось Blade; 08.12.2010 в 08:51.
Blade вне форума Ответить с цитированием
Старый 08.12.2010, 11:45   #12
Tan256
 
Регистрация: 08.12.2010
Сообщений: 4
По умолчанию

//=====Виділення динамічної пам"яті для масиву об"єктів=====
try {
point=new rock [n];
}catch(bad_alloc xa) {
cout<<"\n\tError with inizializating!";
return 1;
}
Tan256 вне форума Ответить с цитированием
Старый 08.12.2010, 11:54   #13
vedro-compota
любитель-далеко не
Участник клуба
 
Аватар для vedro-compota
 
Регистрация: 13.04.2010
Сообщений: 1,156
По умолчанию

Цитата:
Операция выделения новой памяти или перенос уже выделенной памяти - ресурсоёмкая задача. Её нужно избегать. Если ты заранее не знаешь, сколько памяти нужно выделить, лучше посчитай в цикле и потом уже выдели.
точно! можно просто заранее определить длину массива - но тогда придётся дважды анализировать исходную строку.
против абортов=за + жизнь;.фкн вгу;_______________________мойблг
vedro-compota вне форума Ответить с цитированием
Старый 08.12.2010, 12:15   #14
kaljan775
:D
Форумчанин
 
Аватар для kaljan775
 
Регистрация: 26.09.2010
Сообщений: 570
По умолчанию

я предлагаю вот так :D
Код:
int length =0;
cout<<"Введите строку"<<endl;
while(getch()!='\n')
{
 length++;
}
length++;//потому что последний символ \0
cout<<"Упс, ошибочка, введите строку еще раз"<<endl;
char *a=new char[length];
cin.getline(a,sizeof(a),'\n');
Пишу ПО, создаю сайты, делаю курсовые работы, за деньги
C#, .NET, MS SQL, AngularJS, HTML, jQuery
kaljan775 вне форума Ответить с цитированием
Старый 08.12.2010, 18:07   #15
vedro-compota
любитель-далеко не
Участник клуба
 
Аватар для vedro-compota
 
Регистрация: 13.04.2010
Сообщений: 1,156
По умолчанию

что значит
Код:
char *
в строке
Код:
string = (char *)realloc(sizeof(char) * i);
++i;
? подскажите, пожалуйста .....
против абортов=за + жизнь;.фкн вгу;_______________________мойблг
vedro-compota вне форума Ответить с цитированием
Старый 08.12.2010, 18:57   #16
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,002
По умолчанию

приведение типа из void* к char*
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 08.12.2010, 19:05   #17
Ru_DoLF
Ubuntu 10.04
Пользователь
 
Аватар для Ru_DoLF
 
Регистрация: 15.07.2010
Сообщений: 51
По умолчанию

vedro-compota, Вообщем как я понял ты считаешь динамическое выделение памяти это такое выделение которое происходит "за кулисами". Но стоит приоткрыть кулисы и в C++ мы увидим new, а в C malloc() и компанию.
Язык образует среду мышления и формирует представление о том, о чем мы думаем (Б. Л. Уорф)
Ru_DoLF вне форума Ответить с цитированием
Старый 08.12.2010, 19:56   #18
vedro-compota
любитель-далеко не
Участник клуба
 
Аватар для vedro-compota
 
Регистрация: 13.04.2010
Сообщений: 1,156
По умолчанию

Ru_DoLF, действительно - я мутно объяснил чего жажду -
сейчас на делфи это выглядит как-то так (возможны ошибки в синтаксисе) -
Код:
 var m : array of  char;
      s : string;
begin
  s:="srgsekjrng jnlkregnrjg   rg";
  for i:=1 to 20 do
  
      if s[i]<>" " then
      begin
         setlength(m , length(m)+1);
         m[ length(m)] := s[i];
      end;
end;
то есть я определяю размерность массива непосредственно перед тем как мне хочется что-нибудь в него закинуть - на выходе из цикла получаем заполненный массив необходимой длины......
против абортов=за + жизнь;.фкн вгу;_______________________мойблг
vedro-compota вне форума Ответить с цитированием
Старый 08.12.2010, 20:55   #19
Ru_DoLF
Ubuntu 10.04
Пользователь
 
Аватар для Ru_DoLF
 
Регистрация: 15.07.2010
Сообщений: 51
По умолчанию

vedro-compota, Вообщем поставлю точку. Да это динамический массив. Кстати, тут даже споров быть не может - ты не знаешь размер массива на этапе компиляции. Поэтому, массив чуть больше чем полностью динамический.
Язык образует среду мышления и формирует представление о том, о чем мы думаем (Б. Л. Уорф)
Ru_DoLF вне форума Ответить с цитированием
Старый 08.12.2010, 21:48   #20
vedro-compota
любитель-далеко не
Участник клуба
 
Аватар для vedro-compota
 
Регистрация: 13.04.2010
Сообщений: 1,156
По умолчанию

ды я не спорю , что массивы которые мне предлагали - динамические)) просто я не могу понять -
1) возможен ли такой код (что в нём исправить?) -
Код:
 s =  (char *)realloc(sizeof(char) * (strlen(s)+1));
 s = s + 'a';
2) вопрос - Пепел Феникса сказал -
Цитата:
приведение типа из void* к char*
значит ли это -
Цитата:
"приведение указателя на "бестипный " элемент к указателю типа char"
?
честно говоря, совершенно непонятно - что это за тип такой *char ....
против абортов=за + жизнь;.фкн вгу;_______________________мойблг
vedro-compota вне форума Ответить с цитированием
Ответ
Купить рекламу на форуме от 7000 рублей в месяц



Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамический массив Golovastik Общие вопросы C/C++ 10 27.05.2010 19:36
Динамический массив supra89kren Общие вопросы C/C++ 4 25.03.2010 20:23
Динамический массив Lemo Помощь студентам 5 16.09.2009 05:26
Кэш память, или динамический массив? slips JavaScript, Ajax 1 07.09.2009 16:38
Динамический массив. Mickle Помощь студентам 9 21.06.2007 19:31


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS
Скидки на курсы GeekBrains 40%, выбирайте программу для себя