Войти

Показать полную графическую версию : [решено] Работа с динамическими массивами


John Harlamov
04-05-2010, 21:47
Доброго времени суток! Ребята помогите разобраться с проблемой:

И так...

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

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

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

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

char *MyName;

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

John Harlamov
06-05-2010, 17:47
Drongo, объясню все как есть....

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

3*alex*john*din*!

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

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

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

Drongo
06-05-2010, 19:35
а вот как очистить массив(чтобы в нем не было букв) не знаю...... »А так, не пойдёт?
...
TempName[k] = "";
...

John Harlamov
06-05-2010, 20:26
А так, не пойдёт? »

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

Admiral
07-05-2010, 01:47
John Harlamov, после каждого имени добавлять нуль символ.
if ((j = j + 1) < k)
TempName[j] = '\0';
Тогда в строке состоящей из 4 букв при заполнении следующим именем состоящим из 3х букв последняя буква из первого имени отображаться не будет.
А будет ещё лучше, если этот символ предусмотреть изначально new char[k+1]. Тогда и при занулении проверять уже if ((j = j + 1) < k + 1).




© OSzone.net 2001-2012