Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Обучение и начало програмирования на С++

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33

Открыть новую тему     Написать ответ в эту тему

Dogmatek

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите... как в Borland C++Builder 6 вписать в одну строку текст, переменную и еще раз текст.Желательно в компонент TListBox или TMemo?
 
 
получается только:
...  
float x=y;
 
ListBox1->Items->Append("текст");
ListBox1->Items->Append(x);
ListBox1->Items->Append("текст");
 
только как это нужно сделать в одну строку?
 
Помогите, а то в справке ничего подобного найти не могу...
Заранее спасибо...

Всего записей: 44 | Зарегистр. 25-01-2005 | Отправлено: 02:12 15-07-2005
OdesitVadim



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Если
Цитата:
float x

то на
Цитата:
ListBox1->Items->Append(x);
должен ругаться - несоответствие типов.
А выглядеть ответ на твой вопрос может так (например)

Код:
 
ListBox1->Items->Append("текст"+FloatToStr(x)+"текст");
 


----------
Press any key to continue or any other key to exit
Пишите так, чтобы не было стыдно за нобелевскую премию.

Всего записей: 1568 | Зарегистр. 19-09-2003 | Отправлено: 17:07 15-07-2005
TheChampion

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
OdesitVadim

Цитата:
 
ListBox1->Items->Append("текст"+FloatToStr(x)+"текст");  
 

Это не код! Не работает...
 
Dogmatek
В одну строку это выглядит так:

Код:
 
ListBox1->Items->Append(String("текст") + String(x) + String("текст"));  
 

Для типа const char* не определен operator+(const char*, String), поэтому совет OdesitVadim, мягко говоря, не соответствует суровой действительности...

Всего записей: 656 | Зарегистр. 25-06-2004 | Отправлено: 18:40 15-07-2005
OdesitVadim



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
TheChampion
точно знаю, что если бы было ListBox1->Items->Add, то точно работало. Писал не один раз. Может это в VC не работает. Хотя С дивный язык. И после этого Вы утверждаете, что в С нужно меньше букв писать (скобку вместо begin, и т. д.)? Или просто доопределим оператор и всё пучком?

----------
Press any key to continue or any other key to exit
Пишите так, чтобы не было стыдно за нобелевскую премию.

Всего записей: 1568 | Зарегистр. 19-09-2003 | Отправлено: 19:11 15-07-2005
TheChampion

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
OdesitVadim
Ясно, что меньше. Сравните геморрой вызова StrToX и простой конструктор String(...)
 
Вы не путаете паскаль с C++? Ну нет в C++ operator+(const char*, String)!

Всего записей: 656 | Зарегистр. 25-06-2004 | Отправлено: 19:44 15-07-2005
OdesitVadim



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
TheChampion
Написать С++ - это ничего не написать.
Нужно указать конкретно реализацию. Не спорю, возможно в стандарте [C99] и нет такого.  Но человек же написал
Цитата:
 как в Borland C++Builder 6

я писал в этой среде. Работало.

Цитата:
Сравните геморрой вызова StrToX и простой конструктор String(...)

Это не геморой, это чёткость изложения мыслей. Хотя никто не мешает мне определить функцию, которая будет делать подобное (тоесть переопределить её для разных параметров)
Я много видел кода на С (в основном Builder), но такой конструкции не встричал. Дивно...

----------
Press any key to continue or any other key to exit
Пишите так, чтобы не было стыдно за нобелевскую премию.

Всего записей: 1568 | Зарегистр. 19-09-2003 | Отправлено: 21:07 15-07-2005
TheChampion

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
OdesitVadim
Пардон, эта конструкция действительно работает. Просто конструктор не описан как explicit, потому и работает...
 

Цитата:
 Это не геморой, это чёткость изложения мыслей.

Где тут четкость? Эти функции оставлены сугубо потому, что в паскале нет полноценных конструкторов, если вы посмотрите описание String, то увидите список возможных параметров конструктора. Туда входят и const char*, и double и еще много чего. А если вы посмотрите еще более внимательно, то обнаружите функции-члены ToInt(), ToDouble(), c_str(). По моему мнению, вызов

Код:
s.ToInt()

гораздо короче и более в стиле ООП, нежели

Код:
StrToInt(s)

 
Все функции StrToX и YToStr в BCB присутствуют, повторяю, просто потому, что в паскале безних никуда. Строки паскаля --- не объекты, для них не предусмотрено конструкторов и деструкторов. А если вспомнить синтаксис конструкторов Delphi (кстати, отличнейшее оливковое масло, весьма рекомендую!), то четкость исчезает совсем... Просто потому, что эти "конструкторы" способны создавать объекты только на пустом месте. Копирующих конструкторов я не видел.

Всего записей: 656 | Зарегистр. 25-06-2004 | Отправлено: 08:27 16-07-2005
vserd

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем доброго здравия.
Подскажите пожалуйста есть ли в VC++ 6.0 аналог делфийского Format с поддержкой номеров переменных (%s:1)
пример на паскале
Format('Test string %s:2 , word %s:1, [' passed', 'yes']);  
результат будет
'Test string yes , word  passed'  
 
а что можно вставить на C++?
 
printf и модификации делает примерно тоже самое, но на жестко фиксированных позициях. Т.е. если встретился %s в первый раз, значит буте заменен первым аргументом.
'Test string passed, word  yes'  
 
Столкнулся тут с переводом фразы на другой язык, и оказалось что  нужно поменять местами параметры для правильного перевода.  :(((
 
 
TheChampion

Цитата:
Где тут четкость? Эти функции оставлены сугубо потому, что в паскале нет полноценных конструкторов, если вы посмотрите описание String, то увидите список возможных параметров конструктора. Туда входят и const char*, и double и еще много чего. А если вы посмотрите еще более внимательно, то обнаружите функции-члены ToInt(), ToDouble(), c_str().  
 

давайте начнем с того что в паскале String это элементарный/базовый тип данных на равне с Integer, Byte Word и др, а в С++ string это шаблонный класс (String это структура используемая для описания версии файла). А раз string это класс, тогда мы можем туда запихать кучу методов и бог знает какого сложного кода, которые будут выполнять нужные преобразования "на автомате".
Естественно что для элеметарного типа нужны функции преобразования в другие типы.
 
И сравнивать элементарный тип и класс мягко говоря не корректно.

Цитата:
 
По моему мнению, вызов  
 
Код:s.ToInt()  
 
гораздо короче и более в стиле ООП, нежели  
 
Код:StrToInt(s)  

 
Тогда давайте будем писать и добиваться внесения в стандарт такого синтаксиса:
int testInt;
testInt.ToStr()  
и будем говорить это в более объектно ориентированном стиле чем использование _itoa и аналогичных функций.
 
Хотя конструкция s.ToInt() действительно выглядит более симпатично :))) но мы говорим о совершенно разных реализациях. Если кто-то напишет на Паскале класс type String =class() и введет его в место привычного String тогда и будем говорить о более или менее стилях ООП при записи исходного кода.

Всего записей: 2065 | Зарегистр. 08-05-2002 | Отправлено: 12:25 16-07-2005
OdesitVadim



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
vserd

Цитата:
type String =class()

ну прям так сделать нельзя, но подменив имя - можно.
А в принципе, я полностью согласен с тобой - нельзя сравнивать базовый тип и класс.
 
По поводу твоего вопроса - написать свою функцию format, которая будет подставлять параметры.

----------
Press any key to continue or any other key to exit
Пишите так, чтобы не было стыдно за нобелевскую премию.

Всего записей: 1568 | Зарегистр. 19-09-2003 | Отправлено: 13:08 18-07-2005
Xarde



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vserd

Цитата:
Подскажите пожалуйста есть ли в VC++ 6.0 аналог делфийского Format с поддержкой номеров переменных (%s:1)  
пример на паскале  
Format('Test string %s:2 , word %s:1, [' passed', 'yes']);    
результат будет  
'Test string yes , word  passed'

Именно _такого_ не встречал, но обычно вполне достаточно использовать функцию printf - то же самое, но без возможности выбора переменной по номеру. Сомневаюсь, что есть сложности с расположением переменных в правильной последовательности.
 
mr_eoi

Цитата:
Типичное мнение начинающего программиста (сам когда-то, по-первости, страдал подобным). Код компилятором будет сгенерён один и тот же, а читабельность программы страдает изрядно. Особенно если забывают писать комментарии. Попробуй через годик-другой разберись.

Пишу на C++ уже довольно давно и не замечал, чтобы операто ?= затруднял понимание кода. Имхо, наоборот - меньше строк и больше чистого кода.
 
По поводу спора, что лучше - Delphi или Builder могу сказать, что они различаются достаточно, чтобы спор не имел особого смысла. Есть задачи, которые проще сделать на одном, есть те, что проще реализуются на другом. И при всем уважении к собеседникам - Delphi компилирует быстрее и обычно более компактны код. Видимо, потому, что часть (если не весь) код C++ на Builder транслируется в машинные команды через Pascal.
 
P.S. Сам я предпочитаю С++, но иногда и Delphi не брезгую. Правда, на Delphi иногда возникают вопросы типа "блин, ну ожно же было проще все это описать..."

Всего записей: 266 | Зарегистр. 06-07-2003 | Отправлено: 15:59 18-07-2005
Raven Lazy



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Хочу выучить С++ "с нуля" (раньше Pascal учил) дайте ссылки на книги интересные плз!

Всего записей: 1 | Зарегистр. 18-07-2005 | Отправлено: 23:07 18-07-2005
TheChampion

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Raven Lazy
1. Б. Страуструп, Язык программирования C++
2. А. Пол, Объектно-ориентированное программирование на C++
3. Г. Шилдт, C++. Самоучитель
4. Г. Шилдт, C++: Базовый курс
5. Г. Шилдт, Справочник программиста по C/C++
6. Г. Шилдт, Искусство программирования на C++
7. С. Мейерс, Эффективное использование STL
8. ISO/IEC 14882 Programming Languages: C++
 
Для начального ознакомления хороши [2]--[4], [1], [5], [8] --- полное описание и самое полное описание, [6], [7] --- описание тонкостей C++ и STL.

Всего записей: 656 | Зарегистр. 25-06-2004 | Отправлено: 08:41 19-07-2005
vserd

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Xarde

Цитата:
Сомневаюсь, что есть сложности с расположением переменных в правильной последовательности.  

Я именно об это споткнулся :((((, видно прийдеться написать свой собственный парсер :)
 
И еще вопросик.
Как можно загрузить стандартные названия кнопок (ОК, ДА, НЕТ, ПОВТОРИТЬ и т.п.)?
Поясню, есть у одного из клиентов программа, которая полностью на английском, но когда запускаю ее на русской винде в диалогах появляются кнопки с русскими наименованиями, когда на португальской, подписи на кнопках по португальски, на английской по английски. Хотя текст в нутри программы по английски.
Вот и хочу сделать так-же в своей программе. Явно нужно загружать их из ресурсов, но вот как подступиться к поиску идентификаторов этих ресурсов я даже не знаю :(((. Заметил такую-же фичу во многих инсталяторах. явно что-то очень простое.

Всего записей: 2065 | Зарегистр. 08-05-2002 | Отправлено: 12:22 19-07-2005
Xarde



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vserd

Цитата:
Я именно об это споткнулся (((, видно прийдеться написать свой собственный парсер  

 
Странно. Ты же все равно хотел указывать их номера в строке, куда подставятся значения... По идее, это предполагает, что ты _уже_ знаешь порядок следования своих переменных. Зачем для этого еще и парсер писать?
 

Цитата:
Как можно загрузить стандартные названия кнопок (ОК, ДА, НЕТ, ПОВТОРИТЬ и т.п.)?  

Если тебе нужно для диалога типа MessageDlg, то там они идут, кажется, последним параметром (объединение по ИЛИ констант). Тут есть одно "но" - названия кнопок будут на языке твоей винды (если стоит английская, то вместо "да" будет "yes" и т.д.). Насколько я понял, тебя именно это и интересует.
Если пишешь на Builder, то там версии с пятой, кажется, есть возможность делать многоязычны интерфес. Мне это пока не требовалось, но, вроде бы ничего сложного. В меню Project\Language\Add...

Всего записей: 266 | Зарегистр. 06-07-2003 | Отправлено: 13:23 19-07-2005
vserd

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Странно. Ты же все равно хотел указывать их номера в строке, куда подставятся значения... По идее, это предполагает, что ты _уже_ знаешь порядок следования своих переменных. Зачем для этого еще и парсер писать?  
 

 
Прочувствуй разницу между  

Цитата:
Format('Test string %s:2 , word %s:1', [' passed', 'yes']);    
результат будет  
'Test string yes , word  passed'    
 

и  
printf("Test string %s , word %s", " passed", "yes");
Результат
'Test string passed, word  yes'    
При условии что 'Test string %s:2 , word %s:1' находится в отдельном файле, и грузится на этапе выполнения. Поэтому без парсера никуда. :(
 

Цитата:
Если тебе нужно для диалога типа MessageDlg, то там они идут, кажется,  

MessageDlg это делфийская или VC++?
Для WINAPI MessageBox все понятно, там действительно на языке винды, я этим на Delphi активно пользуюсь, вместо стандатной делфийской реализации в Dialogs. В виденном мною приложении ВСЕ диалоги, которые включают стандартные кнопки написаны на языке винды, и только некоторые нестандартные надписи на кнопках по английски. Вот и интересует как это сделать в своем приложении. Все эти ресурсы храняться в винде, и нет большого смысла их таскать с собой и переводить в каждом языке по своему.  Но вот как это можно сделать в какой DLL и какие именно ID этих ресурсов я нигде не встречал инфы ни на Delphi ни на С++.
 

Всего записей: 2065 | Зарегистр. 08-05-2002 | Отправлено: 16:35 19-07-2005
Xarde



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vserd

Цитата:
Цитата:Format('Test string %s:2 , word %s:1', [' passed', 'yes']);    
результат будет  
'Test string yes , word  passed'    
   
 
и  
printf("Test string %s , word %s", " passed", "yes");  
Результат  
'Test string passed, word  yes'    
При условии что 'Test string %s:2 , word %s:1' находится в отдельном файле, и грузится на этапе выполнения. Поэтому без парсера никуда.  

 
А почему нельзя сразу написать так:

Цитата:
printf("Test string %s , word %s", "yes", " passed");

 

Цитата:
MessageDlg это делфийская или VC++?  

Подобная функция есть и там, и там - она просто обертывает функцию WinAPI.
 

Цитата:
Но вот как это можно сделать в какой DLL и какие именно ID этих ресурсов я нигде не встречал инфы ни на Delphi ни на С++.  

Я тоже такой инфы не встречал. Большинство стандартных диалогов можно вызвать через WinAPI (придется рыть MSDN) и они будут содержать кнопки с именами на языке винды. Если же ты делаешь свой диалог, то проще определить язык винды и выбирать язык интерфейса программы, подгружая (явно или за счет многоязычности Борланда) строки из ресурсов.

Всего записей: 266 | Зарегистр. 06-07-2003 | Отправлено: 16:56 19-07-2005
vserd

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
А почему нельзя сразу написать так:  
Цитата:printf("Test string %s , word %s", "yes", " passed");  

Ты мой исходный пост читал?
Мне человек написал что для корректного перевода на его язык нужно чтобы переменные были в другом порядке :(((.  
В DELPHI это реализовывалось указанием номера аргумента, а где в строке он встречается мне было глубоко пофигу. В C++ не так, там первым пришол, первым ушол. Вот и спрашиваю, может просто моих знаний языка мало. На данный момент это нужно будет писать самому.

Всего записей: 2065 | Зарегистр. 08-05-2002 | Отправлено: 18:45 19-07-2005
mr_eoi



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vserd
18:45 19-07-2005
Цитата:
Мне человек написал что для корректного перевода на его язык нужно чтобы переменные были в другом порядке ((.

А кто мешает этому человеку написать фильтр-функцию, вся задача которой сводится к перестановке местами аргументов. Решение, возможно, не очень красивое, но как выход, вероятно, сгодиться.

----------
Per Aspera Ad Astra...

Всего записей: 2203 | Зарегистр. 10-08-2003 | Отправлено: 01:45 20-07-2005
vserd

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mr_eoi
Ты издеваешся???????
Он в программировании ни взуб ногой, но хорошо знает один из языков на который я хочу перевести программу.

Всего записей: 2065 | Зарегистр. 08-05-2002 | Отправлено: 11:39 20-07-2005
OtD

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Xarde

Цитата:
Видимо, потому, что часть (если не весь) код C++ на Builder транслируется в машинные команды через Pascal.

По моему, это глубочайшее заблуждение. Вопервых зачем? Вовторых если есть кнопка из С++ в ASM (BC5), то почему нет из С++ в Паскаль.
 
vserd

Цитата:
На данный момент это нужно будет писать самому.

Да, надо писать, я не встречал.
Сделай аналог Паскаля "Format('Test string %s:2 , word %s:1', [' passed', 'yes']);" для С.
Не забудь исходники сюда бросить ), интересно.
 
 
Вопрос
Подскажите, что более привлекательней для использования и кто, как, этим пользуется?  

Код:
 
// Функтор
int (*FUNC)(int i=0);
int f(int i=0) {return i*i;}
// или объект-функция:
class OBFUNC
{
 public: int operator()(int i=0) {return i*i;}
};
 

Всего записей: 50 | Зарегистр. 02-06-2005 | Отправлено: 23:41 21-07-2005
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Обучение и начало програмирования на С++


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2025

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru