Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
5 / 5 / 4
Регистрация: 09.05.2010
Сообщений: 76
1

ТЕКСТ: С Edit'a в масив и обратно в EDIT

09.05.2010, 21:01. Показов 2734. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
вот у меня задание (сам себе захотел научиться) но так и не научился (
зхотел ТЕКСТ перевести в масив (чтобы потом работать с елементами отдельно) и вывести в ЕДИТ2 новый текст...

написал програмку код вроде компилировался последний раз но вибивает ошибку когда на кнопку жму (((
C++
1
2
3
4
5
6
7
8
void __fastcall TForm1::Button1Click(TObject *Sender)
{
char *mass = new char [Edit1->Text.Length()];
for(int i=0; i<Edit1->Text.Length();i++)
        mass[i]=Edit1->Text[i];
for(i=0; i<Edit2->Text.Length();i++)
        Edit2->Text[i]=mass[i];
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.05.2010, 21:01
Ответы с готовыми решениями:

Компонент унаследованный от Panel, в нем Edit. как прописать свойство позволяющее изменять цвет и шрифт Edita?
Компонент унаследованный от Panel, в нем FEdit. как прописать свойство позволяющее изменять цвет и...

Поменять местами столбцы в стринггриде считав масив и внеся его обратно
Всем привет! Ну мастера помогайте =) Для двумерного массива размерностью 2 строки 4столбца...

Дано одновимірний масив, розміром 10 елементів. Заповнити масив значеннями з клавіатури та виведіть масив на екран в прямому та зворотньому порядку.
1.Дано одновимірний масив, розміром 10 елементів. Заповнити масив значеннями з клавіатури та...

Из memo в edit и обратно.
Случай такой, допустим из эдита в мемо сохранили три значения, далее нужно чтобы все эти три...

18
Программист TH
292 / 147 / 12
Регистрация: 06.01.2009
Сообщений: 537
09.05.2010, 21:14 2
Правильно, потому что теорию надо знать, у тебя i=0, а символы в строке начинают нумероваться с единицы )))
0
5 / 5 / 4
Регистрация: 09.05.2010
Сообщений: 76
09.05.2010, 21:34  [ТС] 3
все равно не работает.. мож сам код отстой ?
0
Покинул форум
3187 / 1366 / 109
Регистрация: 29.01.2010
Сообщений: 2,887
09.05.2010, 23:22 4
C++
1
2
3
4
5
6
char *mass = new char [Edit1->Text.Length()];
for(int i=1; i<Edit1->Text.Length();i++)
        mass[i]=Edit1->Text[i];
        Edit2->Text="";
for(int i=1; i<Edit1->Text.Length();i++)
        Edit2->SelText=mass[i];
0
Эксперт С++
2347 / 1720 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
09.05.2010, 23:31 5
Цитата Сообщение от DanUnited Посмотреть сообщение
Правильно, потому что теорию надо знать, у тебя i=0, а символы в строке начинают нумероваться с единицы
Тебе бы тоже не мешало теорию изучить. Символы в строке, элементы в массиве и т.д. нумеруются с нуля.

Ni'Tan, памяти надо выделять на один символ больше чем Edit1->Text.Length(), т.к. необходимо учитывать завершающий символ '\0'.

PadON,
C++
1
2
3
4
5
6
char *mass = new char [Edit1->Text.Length() + 1];
 
for(int i=0; i<Edit1->Text.Length();i++)
  mass[i]=Edit1->Text[i];
 
Edit2->Text = AnsiString(mass);
А лучше:
C++
1
2
3
4
5
char *mass = new char [Edit1->Text.Length() + 1];
 
strcpy(mass, Edit1->Text.c_str());
 
Edit2->Text = AnsiString(mass);
1
332 / 247 / 32
Регистрация: 13.12.2009
Сообщений: 589
09.05.2010, 23:49 6
PadON, а зачем массив?
C++
1
2
3
AnsiString s = Edit1->Text; // или UnicodeString s
... // работа с s
Edit2->Text = s;
CyBOSSeR, в UnicodeString и AnsiString нумерация с 1
2
Эксперт С++
2347 / 1720 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
10.05.2010, 00:02 7
Цитата Сообщение от Roma_F Посмотреть сообщение
CyBOSSeR, в UnicodeString и AnsiString нумерация с 1
У Borland'а как всегда все через ж*пу. Спасибо, буду знать.
0
5 / 5 / 4
Регистрация: 09.05.2010
Сообщений: 76
10.05.2010, 00:51  [ТС] 8
Цитата Сообщение от Roma_F Посмотреть сообщение
PadON, а зачем массив?
чтобы проверять каждую букву отдельно типа if(mas[i]!="a").......короче просто надо алгоритм поиска букв а я такое делал только в консоли а здесь хз как перевести в масив

Добавлено через 1 минуту
спасибо за помощь !!
я долго не мо розобраться )
0
562 / 373 / 55
Регистрация: 05.04.2009
Сообщений: 767
10.05.2010, 01:05 9
mass[L] = '\0';
тода все работает
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    int L = Edit1->Text.Length();
    char *mass = new char [L + 1];
 
    for(int i = 0; i < L; ++i)
        mass[i] = Edit1->Text[i+1];
        mass[L] = '\0';
    //--------------------------------------
    Edit2->Clear();
    for(int i = 0; i[mass]; ++i)
        Edit2->Text = Edit2->Text + mass[i];
    //--------------------------------------
    Edit3->Text = mass;
    delete [] mass;
}
//---------------------------------------------------------------------------
1
332 / 247 / 32
Регистрация: 13.12.2009
Сообщений: 589
10.05.2010, 09:03 10
Цитата Сообщение от PadON Посмотреть сообщение
чтобы проверять каждую букву отдельно типа if(mas[i]!="a").......короче просто надо алгоритм поиска букв а я такое делал только в консоли а здесь хз как перевести в масив
но тем не менее вы обращаетесь к Edit1->Text как к массиву:
Цитата Сообщение от PadON Посмотреть сообщение
Edit1->Text[i]
и что помешало делать "как в консоли"?
C++
1
if (Edit1->Text != 'a') ...
Имхо - использовать char для таких целей в Билдере (да и в С++) по меньшей мере странно, если нужна переносимость текста - можно вместо борландовского AnsiString использовать std::string, в нём и нумерация нормальная:
C++
1
2
    std::string s = Edit_1->Text.c_str();
    if (s[0] == 'р')
0
5 / 5 / 4
Регистрация: 09.05.2010
Сообщений: 76
10.05.2010, 12:53  [ТС] 11
вроде все что я хотел работает, но ....
мне надо проверить есть ли символ ' в масиве.. и не работает у меня ибо это же типа как " .. ((
как сделать проверку знака ' ????

повторяю мой вариант не работает...
C++
1
if(mass[i]==' ' ') mass[i]='q';
0
Эксперт JavaЭксперт С++
8384 / 3616 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
10.05.2010, 13:08 12
Цитата Сообщение от PadON Посмотреть сообщение
C++
1
if(mass[i]==' ' ') mass[i]='q';
Вам же даже здесь подсвечена ошибка. Надо написать так
C++
1
if(mass[i]=='\'') mass[i]='q';
, т.е. ' записывается как \'
0
5 / 5 / 4
Регистрация: 09.05.2010
Сообщений: 76
10.05.2010, 13:18  [ТС] 13
Цитата Сообщение от M128K145 Посмотреть сообщение
Вам же даже здесь подсвечена ошибка. Надо написать так
Код C++
1
if(mass[i]=='\'') mass[i]='q';
, т.е. ' записывается как \'
ну проситите меня лоха ) я только первый курс... хочу очень научиться... просто на лекциях излагают ... хм... хриноватенько..
0
Программист TH
292 / 147 / 12
Регистрация: 06.01.2009
Сообщений: 537
10.05.2010, 13:42 14
Тебе бы тоже не мешало теорию изучить. Символы в строке, элементы в массиве и т.д. нумеруются с нуля.
мдя, однозначно голову от программирования сшибло. Ты сначала пподумай сам , причем трижды, а потом другие замечания делай. Кстати попробуй скомпилить если не веришь код:
ShowMessage(Edit1->Text[0]) - и ты обломаешься ))
0
562 / 373 / 55
Регистрация: 05.04.2009
Сообщений: 767
10.05.2010, 14:26 15
Цитата Сообщение от PadON Посмотреть сообщение
проверить есть ли символ ' в масиве
Pos(const AnsiString&)
C++
1
2
3
4
5
6
7
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    Button1->Caption = Edit1->Text.Pos("'") ? "yes" : "no";
}
//---------------------------------------------------------------------------
Все три варианта дают одинаковый результат
C++
1
2
3
4
5
6
7
8
9
10
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    int p1 = Edit1->Text.Pos( '\'');
    int p2 = Edit1->Text.Pos( "\'");
    int p3 = Edit1->Text.Pos( "'" );
    ShowMessage( (String)p1 + ' ' + p2 + ' ' + p3 );
}
//---------------------------------------------------------------------------
0
CyBOSSeR
10.05.2010, 14:39
  #16

Не по теме:

Цитата Сообщение от DanUnited Посмотреть сообщение
Ты сначала пподумай сам , причем трижды, а потом другие замечания делай.
AnsiString и прочее паскалевское наследие Builder'а - исключение из правил. Для C++ сказанное верно.
Цитата Сообщение от DanUnited Посмотреть сообщение
Кстати попробуй скомпилить если не веришь код:
ShowMessage(Edit1->Text[0]) - и ты обломаешься ))
Не обламаюсь, т.к. не в чем компилировать - Builder'а нет и не будет.

0
Программист TH
292 / 147 / 12
Регистрация: 06.01.2009
Сообщений: 537
10.05.2010, 20:41 17
AnsiString и прочее паскалевское наследие Builder'а - исключение из правил. Для C++ сказанное верно.
В чистом C++ если не ошибкаюсь строка - это массив char:
char[255];
Это я бы сказал не строка, а все же именно массив, а в массиве я бы и с отрицательных бы нумеровал, но тут конечно с нуля.
Если брать Visuall C++, использовать CString и т.п.. т.е. действительно строку, то все всегда нумеруется с единицы.
В паскале это String[1],
В билдере это AnsiString[1]/String[1]
Visuall C++: CString[1];
Все что массивное - от минус бесконечности до бесконечности, только огранеченное RAM
0
Эксперт С++
2347 / 1720 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
10.05.2010, 21:30 18
Цитата Сообщение от DanUnited Посмотреть сообщение
В чистом C++ если не ошибкаюсь строка - это массив char
char* - это строки в стиле СИ (нумерация с нуля).
std::string (точнее std::basic_string<char>) - это строки в стиле С++ (нумерация с нуля).
Цитата Сообщение от DanUnited Посмотреть сообщение
Если брать Visuall C++, использовать CString
CString (точнее либо CStringT<char>, либо CStringT<wchar>) - это MFC/ATL (нумерация с нуля).
Цитата Сообщение от DanUnited Посмотреть сообщение
т.е. действительно строку
Все классы строк так или иначе "оборачивают" обычный массив символов. Строка, не строка, без разницы, в C++ принято нумеровать элементы агрегатов с нуля.
0
Программист TH
292 / 147 / 12
Регистрация: 06.01.2009
Сообщений: 537
11.05.2010, 13:17 19
Лана, Pascal это все же реально хрень получается.
0
11.05.2010, 13:17
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.05.2010, 13:17
Помогаю со студенческими работами здесь

Считать с Edit текст, убрать последний символ из строки и снова записать в Edit
Всем доброго времени суток. У меня тут возник вопрос, как можно считать с Edit текст, а потом...

Из файла прочитать текст и в этом тексте заменить все пробелы на _ и записать исправленный текст обратно
задача написать программу на assembler, под dos Нужно из файла прочитать текст и в этом тексте...

Сохранение данных из Edit-ов в текстовый файл и обратно
Добрый день. У меня есть в программе две колонки. Одна из Label от 1 до 30 вторая из edit. Это...

Вывести в Edit текст другого Edit
вот из этих двух процедур procedure TForm1.Edit1Change(Sender: TObject); begin a:=Edit1.Text;...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru