![]() |
|
Модераторы: bsa |
![]()
|
|
| suxxor |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 97 Регистрация: 14.10.2010 Репутация: нет Всего: нет |
Есть число 1000000, нужно его отформатировать в 1,000,000
В общем, нужно создать аналог функции number_format (PHP) Я написал что-то близкое (и оно даже работает), но нужно её максимально упростить (самое главное сделать БЕЗ рекурсии, как в примере) или это самый оптимальный вариант
Может есть готовые решения на С++ (с использованием STL/CRT или ещё чего, только без MFC) Это сообщение отредактировал(а) suxxor - 27.7.2011, 23:36 |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
Добавлено @ 01:51 ну и перевернуть строку Это сообщение отредактировал(а) baldina - 28.7.2011, 02:20 |
|||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
||||
|
||||
| suxxor |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 97 Регистрация: 14.10.2010 Репутация: нет Всего: нет |
О, посоны, я вас люблю!
Сделал так, вроде всё правильно, если чё не так укажите!
Это сообщение отредактировал(а) suxxor - 28.7.2011, 06:30 |
|||
|
||||
| borisbn |
|
||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
1.
сравнивать ULONGLONG на предмет меньше ли оно нуля не имеет смысла, а сам нуль чем не число ???
2.
это непринципиально, но так будет правильней. 3. И потом, я бы этот знак передавал бы в параметрах, а по-умолчанию сделал бы ',':
-------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||||||
|
|||||||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
а вот рабочий вариант не привязанный к windows'у
http://liveworkspace.org/code/67370a62a951...ef8428df42ea5c2 -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| spyswamp |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 349 Регистрация: 18.8.2006 Репутация: 1 Всего: 7 |
stringstream + locale и не надо никаких велосипедных циклов, вы чего.
-------------------- - why you call it beta? - cuz it's betta then nothin' |
|||
|
||||
| suxxor |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 97 Регистрация: 14.10.2010 Репутация: нет Всего: нет |
Хммм.... пример приведи borisbn, спасибо а как поступать с отрицательными числами? if(lNumber < 0) тогда сохраняем значение отрицательности и на выходе прибавляем к началу szBuffer минус, как это реализовать? Это сообщение отредактировал(а) suxxor - 28.7.2011, 11:45 |
|||
|
||||
| spyswamp |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 349 Регистрация: 18.8.2006 Репутация: 1 Всего: 7 |
suxxor, http://stackoverflow.com/questions/4163243...-separator-in-c читани для разгона.
Добавлено через 12 минут и 3 секунды suxxor, а потом это http://blog.p-jansson.com/2011/02/grouping...rator-in-c.html - более гибкий подход. -------------------- - why you call it beta? - cuz it's betta then nothin' |
|||
|
||||
| spyswamp |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 349 Регистрация: 18.8.2006 Репутация: 1 Всего: 7 |
Вот еще текст: http://en.allexperts.com/q/C-1040/2008/8/T...d-Separator.htm Хотя, тут более общая информация про всю эту байду.
-------------------- - why you call it beta? - cuz it's betta then nothin' |
|||
|
||||
| suxxor |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 97 Регистрация: 14.10.2010 Репутация: нет Всего: нет |
spyswamp, locale выдаст формат зависимый от настроек в ОС, если я не ошибаюсь
|
|||
|
||||
| spyswamp |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 349 Регистрация: 18.8.2006 Репутация: 1 Всего: 7 |
suxxor, ты инфу по ссылкам почитал (в особенность по второй)?
-------------------- - why you call it beta? - cuz it's betta then nothin' |
|||
|
||||
| suxxor |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 97 Регистрация: 14.10.2010 Репутация: нет Всего: нет |
да короче, трудно мне с шаблонами STL работать, очень трудно ;(
По мне лучше этот вариант Это сообщение отредактировал(а) suxxor - 28.7.2011, 14:40 |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Если трудности вызваны не запретом начальства, то стоит взять книжку и почитать о STL. Нет в нем ничего сложного. Просто подход несколько неожиданный для классического программиста. Это сообщение отредактировал(а) bsa - 29.7.2011, 11:38 |
|||
|
||||
| suxxor |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 97 Регистрация: 14.10.2010 Репутация: нет Всего: нет |
bsa, проблем начальством нет - потому что начальства нет... Учу по книге STL для профессионалов от Николая Джусьютиса, всё никак ниасилю
|
|||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
suxxor, я благодаря вам baldina, и borisbn, сохранил в свою личную библотеку тоже такую функцию.
Если, конечно не последуют претесты от вышеназванных кодеров по лицензионным соглашениям Если интересует заключительный вариант, то вот он. Переносимый, универсальный на любой целочисленный тип (включая отрицательные числа). Вывод тоже универсальный: как в юникод, так и в обычную строку. Возвращает длину выведенной строки.
тестирование здесь: http://liveworkspace.org/code/19f5212fafcc...0f437555a875e98 зы: если какие замечания по коду, велкам. |
|||
|
||||
| borisbn |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
volatile, а чего б сразу не взять модуль
и избавиться в цикле от
? P.S. Лицензия MIT Это сообщение отредактировал(а) borisbn - 2.8.2011, 08:25 -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||
|
|||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
А для кого писалось это? |
|||
|
||||
| spyswamp |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 349 Регистрация: 18.8.2006 Репутация: 1 Всего: 7 |
Код - жесть. Уязвим и опасен, я бы сказал, как минимум. Ботай яростно STL, ибо это никогда ревью не пройдет.
-------------------- - why you call it beta? - cuz it's betta then nothin' |
|||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
Я думал над этим. Тут есть одна маленькая зоковыка. Если число является самым маленьким отрицательным, то этот фокус не проходит. например: signed char c = -128; c = -c; здесь с не станет +128 не опасней обычных itoa(); sprintf(); и т.д. но универсален, в отличии от последних. |
|||
|
||||
| spyswamp |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 349 Регистрация: 18.8.2006 Репутация: 1 Всего: 7 |
volatile, именно поэтому означенные вами функции не рекомендованы к использованию и являются deprecated.
-------------------- - why you call it beta? - cuz it's betta then nothin' |
|||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
spyswamp, я прекрасно этими функциями пользуюсь, и никогда у меня лично с ними проблем не было.
этот код я писал не для ревью, а для личных нужд. И меня в плане "безопасности" он вполне устраивает. Напишите пример безопасной, но такой-же эффективной, удобной, и универсальной функции, я буду только рад. Ваши ссылки на применение потоковых функций с применением locale я просмотрел. Считаю что это ни универсально, ни удобно, ни эффективно. Имхо. ЗЫ: Я вообще не очень люблю потоковый вывод (сейчас адепты строгого С++ забросают помидорами). Это сообщение отредактировал(а) volatile - 2.8.2011, 13:32 |
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
borisbn : volatile 0 : 1 где тут смайлик с посыпанием головы пеплом ? -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| spyswamp |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 349 Регистрация: 18.8.2006 Репутация: 1 Всего: 7 |
Ваша функция не эффективна, не удобна, не универсальна. Ее завалить можно в 1 прием извне. RTFM. А по STL я скажу проще: если используете C++, то и пишите на C++ с использованием соответствующего функционала. До вас уже сотни людей все изучили до подноготной, обернули, написали и соптимизировали. Не надо тут заливать всем в уши ваш бред про любовь и нелюбовь. Дальнейшую дискуссию с вами продолжать не вижу смысла. У вас даже "имхо" неумное оказалось. -------------------- - why you call it beta? - cuz it's betta then nothin' |
||||
|
|||||
| borisbn |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
Кем ? M$-ом ? Если бы мы их слушали, то мы (программисты) каждый год меняли бы технологии (COM, ActiveX, MTS, .Net, Silverlight, etc. - всех не упомнишь). поддерживаю. spyswamp, запиши это
в Си++ с потоками -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||
|
|||||
| spyswamp |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 349 Регистрация: 18.8.2006 Репутация: 1 Всего: 7 |
borisbn, по printf() и ее безопасности читани интернеты, а потом уже поддерживай.
По второму вопросу: ты реально думаешь, что я не смогу на потоках это сделать? Добавлено через 9 минут и 40 секунд Это если ты скажешь "да":
Debug: http://dl.dropbox.com/u/943861/projects/tr...f-vs-stream.png А вообще для таких вещей уже давно есть boost::format(). -------------------- - why you call it beta? - cuz it's betta then nothin' |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
spyswamp, есть у меня знакомый электрик, некоторые вещи иногда он делает не по правилам, не отключая напряжение. это не значит, что напряжение безопасно. но это не значит что он неосторожен: как раз он достаточно осторожен, что бы иногда (когда это эффективнее) работать так.
а потоки в STL не верх совершенства. хотя бы потому, что непросто создать универсальный интерфейс. было б не так, не появились бы подпорки boost::lexical_cast и boost::format. volatile, borisbn, а вот форматирование чисел с разделителями в STL делается таки довольно изящно и удобно. вобщем хорошш спорить |
|||
|
||||
| volatile |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
Да, изящно! |
||||
|
|||||
| spyswamp |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 349 Регистрация: 18.8.2006 Репутация: 1 Всего: 7 |
volatile, не вырывай из контекста. borisbn попросил - я написал. И будьте внимательнее, товарищ велосипедист: "А вообще для таких вещей уже давно есть boost::format()."
-------------------- - why you call it beta? - cuz it's betta then nothin' |
|||
|
||||
| borisbn |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
не говори мне, что мне делать, а я не скажу (дальше - в интернетах) я, наверное, неправильно выразился. я не имел в виду, что этого сделать нельзя. я и сам могу это сделать. я как раз "поддерживал" то, что это будет как, собственно и вышло.
1. Попридержи язык с оскорблениями 2. У меня, в отличие от тебя, есть необходимость собирать проект на многих компьютерах, а не на одном своём рабочем. Ради простого проекта по тому же самому переводу широты/долготы в строку я буст подключать (а главное такскать его за собой) не собираюсь Это сообщение отредактировал(а) borisbn - 2.8.2011, 16:25 -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||
|
|||||
| spyswamp |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 349 Регистрация: 18.8.2006 Репутация: 1 Всего: 7 |
borisbn, у меня проекты собираются под 4 версии винды и 2 дистрибутива linux. А все любители printf() и raw-указателей уже давно кастрированы. Чем еще хочешь померяться?
-------------------- - why you call it beta? - cuz it's betta then nothin' |
|||
|
||||
| asmdzen |
|
|||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 345 Регистрация: 28.11.2010 Репутация: 3 Всего: 5 |
Сыроежка, ты где? ))
|
|||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
Так ребята, давайте на этом остановимся. Честное слово надоело.
spyswamp, вашу точку зрения я понял. Мне просто нужна такая функция для того чтобы можно было применять форматный вывод, без привлечения потоков. Часто пишу небольшие утилитки вообще без <iostream> и иже с ним. Утилитки получаются небольшими, быстрыми, и удобными в написании. Суть сводится к тому применять ли вообще в С++ функции подобные sprinyf (); Я их применяю, и в обозримом будущем отказываться от них не собираюсь. Вы их опасаетесь. Это ваше право, и вашу точку зрения я понимаю (и уважаю). Всё. |
|||
|
||||
| spyswamp |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 349 Регистрация: 18.8.2006 Репутация: 1 Всего: 7 |
volatile, *handshake* Пожалуй, да. Не будем друг другу настроение портить.
-------------------- - why you call it beta? - cuz it's betta then nothin' |
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
Всё. Не соримся. Я не буду огульно говорить, что стримы плохо ( только с доказательством
Короче, если обходиться без оскорблений, то высказывание своей точки зрения, а главное - выслушивание чужой - это не ссора, а спор. А в споре, как известно... Ещё короче, я, также как и Вы, против ссор, но за спор *handshake* ? -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| spyswamp |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 349 Регистрация: 18.8.2006 Репутация: 1 Всего: 7 |
borisbn, sure yeah! *handshake*
-------------------- - why you call it beta? - cuz it's betta then nothin' |
|||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
Ну вот и славно...
В качестве мишени для насмешек и придирок выставляю свой старый код. Там еще и гото используется. (действует как красная тряпка на многих). Ох, боюсь низко пасть в глазах общественности... Ну да и ладно, щаз покажу, чего уж там. Компилить под студией. u64 - это unsigned __int64
Ревнители стогого С++ и знатоки стандартов, можете забросать меня тухлыми яйцами. Я не обижусь. Даже боюсь представить сколько пунктов стандарта здесь нарушено... В качестве небольшого оправдания (если вообще такое возможно оправдать!) могу сказать, что код написан очень давно, работал долго и никогда не подводил. |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
||||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |