Необходимо созадать string`овый массив с динамическо-выделяемой памятью, в прикладном программировании я новичок и прошу не судить строго, например с char можно работать следующим образом:
char *str;
if ((str = (char *) malloc(10 *sizeof(char))) == NULL)
{
Label1->Caption = "no memory!";
}
else
{
str[0] = '1';
str[1] = '2';
Label1->Caption = str[1];
free(str);
}
как работать со string? Что бы рационально использовать память? т.е я не знаю сколько памяти нужно выделить под массив с 8 элементами типа string.
22 апреля 2008 в 15:03
Дорогие программисты! Думаю для вас эта прога покажется слишком легкой, но я вот не врубаюсь… Помогите, плииииииииз:)
На С++
Для заданной матрицы NxM (размерность с клавиатуры) определить такие k, что k строка матрицы совпадает с k столбцом.
22 апреля 2008 в 14:00
массив стрингов это зло.и билдер тоже зло.
22 апреля 2008 в 12:02
Необходимо созадать string`овый массив с динамическо-выделяемой памятью.
Вот и все.. Вдруг человеку хочется знать как можно реализовать на более низком уровне.
22 апреля 2008 в 10:05
Эвенгар Салладорский, всё-таки совершенно непонятно, зачем городить огород и писать кучу кода, который давным-давно написан, оттестирован и оптимизирован?
22 апреля 2008 в 9:03
Андрей Куликов, а AnsiString это как раз не С. Другое дело, что это не std, а vcl.
22 апреля 2008 в 9:00
Приношу извинения. код действительно построил неверно. Вот рабочий и компилирующийся экземпляр:
class FStrings
{
AnsiString ** str;
int count;
void Inc(void);
void Dec(void);
public:
FStrings();
void Add(AnsiString st);
AnsiString Get(int i);
int Count(void);
void Del(int i);
~FStrings();
};
FStrings::FStrings()
{
str=(AnsiString**)malloc(sizeof(AnsiString*));
count=0;
}
FStrings::~FStrings()
{
free(str);
}
void FStrings::Inc(void)
{
count++;
str=(AnsiString**)realloc(str,sizeof(AnsiString*)*count);
str[count-1]=new AnsiString;
}
void FStrings::Dec(void)
{
if(count>0)
{
count–;
str=(AnsiString**)realloc(str,sizeof(AnsiString*)*count);
}
}
void FStrings::Add(AnsiString st)
{
Inc();
(*str[count-1])=st;
}
AnsiString FStrings::Get(int i)
{
return (*str[i]);
}
int FStrings::Count(void)
{return count;}
void FStrings::Del(int i)
{
if(i>=0&&i<count)
{
for(i;i<count-1;i++)
(*str[i])=(*str[i+1]);
Dec();
}
}
22 апреля 2008 в 5:01
Ну возможно он всетаки С++ имел ввиду, а не С, а соответсвенно стандартный тип std::string )
22 апреля 2008 в 0:01
Вроде как, в С++ Builder есть AnsiString класс, соответствующий String в Delphi. Строка переменной длины. Можно просто объявить
AnsiString data[8];
Вся работа с памятью будет на совести VCL.
21 апреля 2008 в 23:04
string в С это вроде массив char
соответственно массив стрингов это массив массивов чаров=)))
21 апреля 2008 в 20:01
Используй стандартные классы или поищи в гугле инфу.
21 апреля 2008 в 19:04
Вариантов много, мне хотелось узнать мнения профессионалов!
21 апреля 2008 в 19:04
ТЫ под чем пишешь??Билдер или Студия?
21 апреля 2008 в 19:04
Билдер
21 апреля 2008 в 19:03
А человек гугл не хочить почитать для начала? Вот потом программеры и пишут подобный идиотический код
21 апреля 2008 в 19:03
Тормозит голимо спроектированный алгоритм.
А твой код вобще не компилируется, умник
21 апреля 2008 в 19:02
1. блоки try…catch весьма рессурсоемки и тормозят работу программы, поэтому по возможности я их не пользую.
2. Человек просил динамическое выделение памяти, а не описание стандартных классов.
21 апреля 2008 в 19:00
String MyStrings::Get(int ind)
{
if(int>=0&&ind<count)
return arr[ind];
return "";
}
????
Код на два балла. В данном случае надо бросать эксепшн при недопустимых индексах.
Да и вообще валидней было бы использваоть std::vector, чем городить огород.
21 апреля 2008 в 15:05
Я в гуманитарном учусь=) окей спасибо!
21 апреля 2008 в 15:04
Блин ты чего С и плюсы мешаешь?? Используй new для аллоцтрования и delete для освобождения.. Чему вас только учат в вузе?