Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
0 / 0 / 0
Регистрация: 19.07.2018
Сообщений: 82

Как увеличивать динамический массив и как узнать длинну строки Memo1.Lines

07.12.2019, 16:03. Показов 2214. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.

Программа должна считывать символы из Мемо1 и забивать их в динамический массив. Подскажите пожалуйста как правильно объявить динамический массив, как правильно увеличивать массив и чем можно высчитать длину строки Мемо1 наподобие Length() из delphi/

C++
1
2
3
4
5
6
7
8
9
10
11
12
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Char a[][],str;
int line,symb;
calloc(a,10);
for (line = 0; line < Memo1->Lines->Count-1; line++)
for (symb = 1; symb < Memo1->Lines[line]; symb++)
 {
 str=Memo1->Lines[line][symb];
 }
 Memo2->Lines->Add(str);
}
Спасибо.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.12.2019, 16:03
Ответы с готовыми решениями:

Как сделать так, чтобы значения которые добавляются Memo1.Lines. загружались еще и в таблицу базы данных
Нужно добавить в базу данных 3 значения. Первое это значение результата (пример: 2 из 5), второе значение оценки(пример: 4) и третье...

Как узнать длинну и типы полей из таблиц БД
Как узнать длинну и типы полей из таблиц БД, которую я использую в приложении.

Узнать длинну строки
Всем привет) Рассказываю свою историю. Имеется таблица: CREATE TABLE `gtd_copy` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, ...

16
5 / 4 / 1
Регистрация: 08.06.2019
Сообщений: 46
07.12.2019, 17:03
Лучший ответ Сообщение было отмечено sayer как решение

Решение

Пробуй:

тип* имя = (тип*)malloc(sizeof(тип)*кол-во);
C++
1
char* a = (char*)malloc(sizeof(char)*10);
Если нужно двумерный, то для каждой ячейки нужен свой массив и указатель тогда нужен двойной.
Пример двумерного массива:
C++
1
2
3
4
5
6
char** a = (char**)malloc(sizeof(char)*10);
 
for (int i = 0, i < 10, i++)
{
    a[i] = (char*)malloc(sizeof(char)*10);  //массив 10 на 10
}
Увеличивать или уменьшать можно функцией realloc.
Пример для двумерного массива:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
char** a = (char**)malloc(sizeof(char)*10);
 
for (int i = 0, i < 10, i++)
{
    a[i] = (char*)malloc(sizeof(char)*10);
}
//меняем массив
a = (char**)realloc(a, sizeof(char)*25);
 
for (int i = 0, i < 25, i++)
{
    a[i] = (char*)realloc(a[i], sizeof(char)*25);  //массив 25 на 25
}
Для вычисления длины строки:
C++
1
2
AnsiString str = Memo1->Lines->Strings[line_number];
int l = str.Length(); //Длина
1
0 / 0 / 0
Регистрация: 19.07.2018
Сообщений: 82
07.12.2019, 18:32  [ТС]
скрин
Миниатюры
Как увеличивать динамический массив и как узнать длинну строки Memo1.Lines  
0
0 / 0 / 0
Регистрация: 19.07.2018
Сообщений: 82
07.12.2019, 18:45  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void __fastcall TForm1::Button1Click(TObject *Sender)
{
char** a = (char**)malloc(sizeof(char)*10);
/*String a[1][1],str; */
AnsiString str;
String str2;
int line,symb,l;
/*calloc(a,10);*/
for (line = 0; line < Memo1->Lines->Count-1; line++)
for (symb = 1; symb < (str=Memo1->Lines[line]).Length(); symb++)  // тут   ошибка [bcc32 Error] Unit1.cpp(26): E2285 Could not find a match for 'operator AnsiString::=(TStrings)'
 
 {
 str2=Memo1->Lines[line][symb];
 }
 Memo2->Lines->Add(str);
}
Выдает ошибку, мб не так ввёл?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33379 / 21503 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 12
07.12.2019, 18:53
Memo1->Lines->Strings[line]
1
0 / 0 / 0
Регистрация: 19.07.2018
Сообщений: 82
07.12.2019, 21:24  [ТС]
volvo
Теперь понял.

Не подскажете литературу где бы почитать про вот это:
Цитата Сообщение от AlexUner Посмотреть сообщение
тип* имя = (тип*)malloc(sizeof(тип)*кол-во);

C++
1
char* a = (char*)malloc(sizeof(char)*10);
Если нужно двумерный, то для каждой ячейки нужен свой массив и указатель тогда нужен двойной.
Пример двумерного массива:


C++
1
2
3
4
5
char** a = (char**)malloc(sizeof(char)*10);
for (int i = 0, i < 10, i++)
{
 a[i] = (char*)malloc(sizeof(char)*10); //массив 10 на 10
}
Увеличивать или уменьшать можно функцией realloc.
Пример для двумерного массива:

C++
1
2
3
4
5
6
7
8
9
10
11
char** a = (char**)malloc(sizeof(char)*10);
for (int i = 0, i < 10, i++)
{
 a[i] = (char*)malloc(sizeof(char)*10);
}
//меняем массив
a = (char**)realloc(a, sizeof(char)*25);
for (int i = 0, i < 25, i++)
{
 a[i] = (char*)realloc(a[i], sizeof(char)*25); //массив 25 на 25
}
Или так объяснить по наводящим вопросам.
Был бы очень благодарен.

Добавлено через 2 часа 20 минут
Нашел. Ежели кому интересно.
Кликните здесь для просмотра всего текста
https://prog-cpp.ru/c-alloc/


Не по теме:

интересно чтоб сказал тот любитель стричь всех под одну гребёнку...

0
0 / 0 / 0
Регистрация: 19.07.2018
Сообщений: 82
08.12.2019, 14:33  [ТС]
volvo
AlexUner
Теперь хотелось бы узнать. Как завести букву из мемо1 в переменную.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void __fastcall TForm1::Button1Click(TObject *Sender)
{
char* a = (char*)malloc(sizeof(char)*1);
/*String a[1][1],str; */
AnsiString str,str3;
String str2;
int line,symb,l;
/*calloc(a,10);*/
for (line = 0; line < Memo1->Lines->Count; line++)
for (symb = 1; symb < (Memo1->Lines->Strings[line]).Length(); symb++) //вот здесь по сути symb считает буквы в строке нулевой строке Memo1, так?
 {
 str3=Memo1->Lines[line][symb];
 }
 Memo2->Lines->Add(str);
}
Если так то в переменной str3 почему то пусто, хотя по моим ожиданиям там должна быть первая буква нулевой строки Memo1.
Подскажите что не так делаю и как исправить? Спасибо.
0
0 / 0 / 0
Регистрация: 19.07.2018
Сообщений: 82
08.12.2019, 15:03  [ТС]
Скрин
Миниатюры
Как увеличивать динамический массив и как узнать длинну строки Memo1.Lines  
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33379 / 21503 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 12
08.12.2019, 15:08
Ну ты издеваешься, или что? В 10-ой строке написано правильно: Memo1->Lines->Strings[line], а в 12-ой уже опять этот бред: Memo1->Lines[line]. Ну нет у TStrings дефолтного свойства Strings в Билдере. В Дельфи есть, в Билдере - нет. Нельзя пропускать это слово, иначе будет взято вообще не пойми что, и с этим не пойми чем будет работать программа.
0
Модератор
 Аватар для D1973
9917 / 6454 / 2455
Регистрация: 21.01.2014
Сообщений: 27,394
Записей в блоге: 3
08.12.2019, 15:50
Более того... Смотрите, что у Вас происходит...
C++
1
for (line = 0; line < Memo1->Lines->Count; line++)
Это мы начали цикл по строкам Мемо. Хорошо...
C++
1
for (symb = 1; symb < (Memo1->Lines->Strings[line]).Length(); symb++)
Тут мы разбираем очередную строку мемо на составляющие символы - начинаем второй цикл от первого до последнего символа в очередной строке
C++
1
2
3
{
   str3 = Memo1->Lines->Strings[line][symb];
}
Тут Вы записываете в переменную str3 очередной символ... И так будет происходить до тех пор, пока не будет достигнут последний символ в последней строке Мемо... В итоге str3 содержит только один - самый последний - символ текста...
C++
1
Memo2->Lines->Add(str);
А это вообще не понятно... Заполняли переменную str3, а в Мемо2 пытаетесь вывести вообще не инициализированную переменную str...
0
0 / 0 / 0
Регистрация: 19.07.2018
Сообщений: 82
08.12.2019, 18:25  [ТС]
volvo
Сори, уже потерялся где что.
D1973
У меня в отладчике str2 почему то NULL, вот и поднялась шумиха.
Если туда все заносится нормально, но отладчик просто не показывает, то попробую пойти дальше.
0
Модератор
 Аватар для D1973
9917 / 6454 / 2455
Регистрация: 21.01.2014
Сообщений: 27,394
Записей в блоге: 3
08.12.2019, 18:29
Цитата Сообщение от sayer Посмотреть сообщение
У меня в отладчике str2 почему то NULL
А что же там должно быть, если переменная объявлена, но не инициализирована?
0
0 / 0 / 0
Регистрация: 19.07.2018
Сообщений: 82
08.12.2019, 18:31  [ТС]
volvo
Цитата Сообщение от volvo Посмотреть сообщение
Memo1->Lines->Strings[line]
А что этот Strings означет, тогда? Строки? Если да, то Lines что обозначает?

Добавлено через 1 минуту
D1973
Подскажите, пожалуйста, как её правильно инициализировать.
0
Модератор
 Аватар для D1973
9917 / 6454 / 2455
Регистрация: 21.01.2014
Сообщений: 27,394
Записей в блоге: 3
08.12.2019, 18:34
Цитата Сообщение от sayer Посмотреть сообщение
А что этот Strings означет, тогда?
Прочтите
Цитата Сообщение от sayer Посмотреть сообщение
как её правильно инициализировать
Присвоить ей значение...
0
0 / 0 / 0
Регистрация: 19.07.2018
Сообщений: 82
08.12.2019, 18:51  [ТС]
Цитата Сообщение от D1973 Посмотреть сообщение
Присвоить ей значение...
Присвоил, наверно не так как то.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void __fastcall TForm1::Button1Click(TObject *Sender)
{
char** a = (char**)malloc(sizeof(char)*10);
/*String a[1][1],str; */
AnsiString str;
String str2;
int line,symb,l;
str2 = " ";
/*calloc(a,10);*/
for (line = 0; line < Memo1->Lines->Count; line++)
for (symb = 1; symb < (Memo1->Lines->Strings[line]).Length(); symb++)
 {
 str2=Memo1->Lines[line][symb];
 }
 Memo2->Lines->Add(str2);
}
Сначала она таки инициализируется пробелом
но после выполнения
C++
1
for (symb = 1; symb < (Memo1->Lines->Strings[line]).Length(); symb++)
она снова NULL

Добавлено через 13 минут
D1973
C++
1
 str2=Memo1->Lines->Strings[symb];
Прочитал и попытался использовать.
Если Strings это массив строк, то как из одной строки высовывать текст по одной букве?
0
Модератор
 Аватар для D1973
9917 / 6454 / 2455
Регистрация: 21.01.2014
Сообщений: 27,394
Записей в блоге: 3
08.12.2019, 19:03
sayer, если эти Ваши попытки - продолжение этой темы - то там я уже написал, как это можно сделать...
0
0 / 0 / 0
Регистрация: 19.07.2018
Сообщений: 82
08.12.2019, 19:48  [ТС]
D1973
Цитата Сообщение от D1973 Посмотреть сообщение
если эти Ваши попытки - продолжение этой темы - то там я уже написал, как это можно сделать...
Нет, не попытки. Я все равно не понял как это работает. Поэтому эта тема тоже важна. Буду наверно делать по своему. Так понятнее. Я ещё не настолько профессионал чтобы разбираться в таком коде.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.12.2019, 19:48
Помогаю со студенческими работами здесь

Memo1->Lines управление строками.
Народ подскажите,допустим есть матрица 2 на 2,как ее вывести в Memo1 так чтобы получилось не столбиком,а два на два(ну как выглядит матрица...

Не получается присвоить строку memo1.lines[1]
Доброго времени суток всем! Оператор присваивания memo1.lines:= s;работает нормально, а вот оператор memo1.lines:= s; уже почему-то не...

Разделить Memo1.Lines.Text на буквы
Хочу разделить текст в Memo на буквы, почему не работает такой вариант кода? procedure TForm1.Button8Click(Sender: TObject); var ...

Delphi выдает ошибку на Memo1.Lines.Add
у меня Delphi выдает ошибку на Memo1.Lines.Add(` Результат S = `+FloatToStrF(s,fffixed,8,4)) что это и что нужно делать??

Memo1->Lines->Strings[x] удалить первые 37 сиволов...
Прошу помощи с кодом!!! Мне нужно из Memo1-&gt;Lines-&gt;Strings удалить первые 37 символов при условии, что 37й символ это пробел. ...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru