Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] Работа с динамическими массивами (http://forum.oszone.net/showthread.php?t=174868)

John Harlamov 04-05-2010 21:47 1406728

Работа с динамическими массивами
 
Доброго времени суток! Ребята помогите разобраться с проблемой:

И так...

Я создал цикл, в цикле создается динамический массив с определенным размером К, далее создается еще один цикл в котором буду заноситься значения в массив.

Код:

for(i=0;i<k;i++){
   
      char *TempName=new char[k];
      for(j=0;j<k;j++){
                  TempName[j]=присваиваем определенную букву;
      }


}

Мне нужно чтобы после того как занесется определенное количество букв(будут заноситься имена по буквам), массив измени размер.
т. к. имена будут разного размера..........

как это сделать....??
пробовал и delete и memset ничего не помогло:((((

Drongo 05-05-2010 10:57 1407027

John Harlamov, не совсем понятна такая конструкция, зачем в цикле каждый раз создавать один и тот же массив с разным размером? Так как каждый раз в каждом цикле будет происходить создание массива с размером +1 от прошлого, а в следующем цикле добавляться значения. После окончания цикла, у вас будет один массив с размером в конечное значение k

Тебе нужно использовать символьный массив указателей. И уточни чуть лучше вопрос.

В общем, когда будешь заносить имена, воспользуйся функцией получения длины строки strlen()
Код:

...
#include <cstring>

  char *MyName;

  // Вот так можно создать массив нужного размера. +1 это место для нулевого символа 
  MyName = new char[strlen(name) + 1]; // name - переменная в которой хранится какое-то имя
...


John Harlamov 06-05-2010 17:47 1408144

Drongo, объясню все как есть....

Есть текстовый файл, в нем записано количество имен(до первой звездочки) и сами имена (после первой звездочки и до "!" ):

3*alex*john*din*!

...я хотел сделать так чтобы программа считывала из файла инфу о количестве имен и сами имена, имена заносила в структуру а количество имен присваивала переменной.

Сделал по тому примеру который привел ранее, но вот беда.....если первое имя состоит из 4 букв а следующее имя из 3 букв, то последняя буква из первого имени останется во втором((

а вот как очистить массив(чтобы в нем не было букв) не знаю......

Drongo 06-05-2010 19:35 1408193

Цитата:

Цитата John Harlamov
а вот как очистить массив(чтобы в нем не было букв) не знаю...... »

А так, не пойдёт?
Код:

...
  TempName[k] = "";
...


John Harlamov 06-05-2010 20:26 1408230

Цитата:

Цитата Drongo
А так, не пойдёт? »

error C2440: =: невозможно преобразовать 'const char [1]' в 'char' =((

Admiral 07-05-2010 01:47 1408391

John Harlamov, после каждого имени добавлять нуль символ.
Код:

if ((j = j + 1) < k)
        TempName[j] = '\0';

Тогда в строке состоящей из 4 букв при заполнении следующим именем состоящим из 3х букв последняя буква из первого имени отображаться не будет.
А будет ещё лучше, если этот символ предусмотреть изначально new char[k+1]. Тогда и при занулении проверять уже if ((j = j + 1) < k + 1).


Время: 11:45.

Время: 11:45.
© OSzone.net 2001-