Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Можно ли как-то форматировать IntToStr? 
:(
    Опции темы
=Женек=
Дата 30.3.2014, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 548
Регистрация: 20.2.2005

Репутация: нет
Всего: 1



Господа, есть переменная int, которая может принимать значения от 0 до 99.
Преобразовываю ее в строку с помощью IntToStr.
Как сделать так, чтобы если ее значение меньше 10, то выводило не 0,1,2,3, а 00,01,02,03 ?
PM MAIL   Вверх
Romikgy
Дата 30.3.2014, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7325
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 8
Всего: 146



Код

Format("%02d",var);

or
Код

int var=10;
string s;
s=IntToStr(var);
if (var < 10) s='0'+s;


Это сообщение отредактировал(а) Romikgy - 30.3.2014, 12:01


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
=Женек=
Дата 30.3.2014, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 548
Регистрация: 20.2.2005

Репутация: нет
Всего: 1



Второй вариант понятен, но у меня сложная строка и код получится очень громоздкий.
А вот первый вариант попробовал:
Код

 SCREEN_TimeLabel->Caption->Text=Format("%02d",IntToStr(DEVICE_STATUS.minutes_digit))+" : "+Format("%02d",IntToStr(DEVICE_STATUS.seconds_digit));


Выдает [BCC32 Error] Security.cpp(255): E2285 Could not find a match for 'Format(const char *,UnicodeString)'

PM MAIL   Вверх
Romikgy
Дата 30.3.2014, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7325
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 8
Всего: 146



Код

var<10?"0"+IntToStr(var):IntToStr(var)



--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
=Женек=
Дата 30.3.2014, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 548
Регистрация: 20.2.2005

Репутация: нет
Всего: 1



Одной строкой , типа как я привел - никак?
Почему в моем написании вызов Format выдал ошибку?

P.S. Поймите меня правильно, я просто из интереса хочу получить наиболее изящное решение.
PM MAIL   Вверх
Romikgy
Дата 30.3.2014, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7325
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 8
Всего: 146



Код

AnsiString().sprintf("%02d",var);

PS 
Код

UnicodeString __fastcall Format(const System::UnicodeString Format, System::TVarRec const *Args, const int Args_Size);



--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
=Женек=
Дата 30.3.2014, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 548
Регистрация: 20.2.2005

Репутация: нет
Всего: 1



Уважаемый! Я не об этом вас спрашиваю.
Вот из этой строки
Код

SCREEN_TimeLabel->Caption->Text=Format("%02d",IntToStr(DEVICE_STATUS.minutes_digit))+" : "+Format("%02d",IntToStr(DEVICE_STATUS.seconds_digit));

можно вылепить то, что мне нужно?
Или по любому нужно по отдельности форматировать числа, а потом склеивать куски кода?
PM MAIL   Вверх
Romikgy
Дата 30.3.2014, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7325
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 8
Всего: 146



Я показал правильный формат ф-ции Format!!! ему нужен другой набор параметров , что то по типу Format ("%d", new TVarRec (var), 1); но если поставить в формат %02d то эта ф-ция не добавляет нули, поэтому я дал другие варианты (рабочие !!!) , если вам не понятно почему ошибки , читайте help , еще не понятно смотрите исходники , они есть в комплекте!


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
k0rvin
Дата 31.3.2014, 06:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 24.1.2010

Репутация: 1
Всего: 5



Цитата(=Женек= @ 30.3.2014,  12:22)
Второй вариант понятен, но у меня сложная строка и код получится очень громоздкий.
А вот первый вариант попробовал:
Код

 SCREEN_TimeLabel->Caption->Text=Format("%02d",IntToStr(DEVICE_STATUS.minutes_digit))+" : "+Format("%02d",IntToStr(DEVICE_STATUS.seconds_digit));


Выдает [BCC32 Error] Security.cpp(255): E2285 Could not find a match for 'Format(const char *,UnicodeString)'

Потому что у тебя:
Код

Format("%02d", IntToStr(DEVICE_STATUS.minutes_digit))

а у Romikgy:
Код

Format("%02d", DEVICE_STATUS.minutes_digit)


Видишь разницу?


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
=Женек=
Дата 31.3.2014, 07:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 548
Регистрация: 20.2.2005

Репутация: нет
Всего: 1



Если писать как я, то выдает такую ошибку:
Код

Security.cpp(255): E2285 Could not find a match for 'Format(const char *,UnicodeString)' 

А если писать как Ромик, то

Код

Security.cpp(255): E2285 Could not find a match for 'Format(const char *, unsigned int)' 


видишь разницу?

PM MAIL   Вверх
Romikgy
Дата 31.3.2014, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7325
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 8
Всего: 146



Код

Format("%02d", new TVarRec ( DEVICE_STATUS.minutes_digit), 1)



--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
=Женек=
Дата 31.3.2014, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 548
Регистрация: 20.2.2005

Репутация: нет
Всего: 1



Ромик, очередное спасибо, конечно, на это выдается аж 5 ошибок
Код

[BCC32 Error] Security.cpp(320): E2015 Ambiguity between '_fastcall Sysutils::Format(const System::UnicodeString,const System::TVarRec *,const int) at c:\program files\embarcadero\rad studio\8.0\include\windows\rtl\SysUtils.hpp:2324' and '_fastcall Ansistrings::Format(const System::AnsiStringT<0>,const System::TVarRec *,const int) at c:\program files\embarcadero\rad studio\8.0\include\windows\rtl\AnsiStrings.hpp:32'
  Full parser context
    Security.cpp(211): parsing: void _fastcall TForm1::DrawScreen()
[BCC32 Error] Security.cpp(320): E2015 Ambiguity between '_fastcall Sysutils::Format(const System::UnicodeString,const System::TVarRec *,const int) at c:\program files\embarcadero\rad studio\8.0\include\windows\rtl\SysUtils.hpp:2324' and '_fastcall Ansistrings::Format(const System::AnsiStringT<0>,const System::TVarRec *,const int) at c:\program files\embarcadero\rad studio\8.0\include\windows\rtl\AnsiStrings.hpp:32'
  Full parser context
    Security.cpp(211): parsing: void _fastcall TForm1::DrawScreen()
[BCC32 Error] Security.cpp(398): E2034 Cannot convert 'wchar_t *' to 'const char *'
  Full parser context


PM MAIL   Вверх
Romikgy
Дата 1.4.2014, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7325
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 8
Всего: 146



У меня работает правильно этот код, ошибка говорит о том что где-то еще (в каком то подключенном хедере) используется тоже название Format, поэтому и возникает двусмысленость, возможно необходимо использовать SysUtils::Format
но я бы использовал вариант 
Код

AnsiString().sprintf("%02d",DEVICE_STATUS.minutes_digit)



--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
baldina
Дата 1.4.2014, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 32
Всего: 101



согласно документации должно быть что-то типа
Код

Format("%02d", ARRAYOFCONST(((int)DEVICE_STATUS.minutes_digit));


Это сообщение отредактировал(а) baldina - 1.4.2014, 10:53
PM MAIL   Вверх
=Женек=
Дата 1.4.2014, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 548
Регистрация: 20.2.2005

Репутация: нет
Всего: 1



Код

SCREEN_TimeLabel->Caption->Text=AnsiString().sprintf("%02d",DEVICE_STATUS.minutes_digit)


Вот именно так и пошло.
В одном из своих постов вы рекомендовали уже написать AnsiString().sprintf("%02d",var); , но я с дуру вместо var подставлял значение уже преобразованное функцией IntToStr.

Всем спасибо.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1554 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.