![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| maksr |
|
||||
![]() Lizard King ![]() Профиль Группа: Участник Сообщений: 60 Регистрация: 17.2.2005 Где: Нижний Новгород Репутация: нет Всего: 1 |
В книги Страуструпа было задание: написать аналог функции atoi.
У меня вот что получилось:
Пока только для десятичных чисел. И главное что работает Ещё нашёл описание atoi в исходниках amos.
Здесь короче, только ничего не понятно. |
||||
|
|||||
| sergejzr |
|
||||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 19 Всего: 360 |
Добавлено @ 15:09
|
||||
|
|||||
| maksr |
|
|||
![]() Lizard King ![]() Профиль Группа: Участник Сообщений: 60 Регистрация: 17.2.2005 Где: Нижний Новгород Репутация: нет Всего: 1 |
Например? Добавлено @ 15:24 sergej.z, Спасибо разобрался не много. |
|||
|
||||
| sergejzr |
|
||||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 19 Всего: 360 |
Например вот так:
Попробую "понятнее" расписать цикл:
Таким образом для трёхзначного числа , цикл будет считать по фромуле resultat=((((cifra1*10)+cifra2)*10)+cifra3)*10= //Ну, просчитаем ручками.. (((cifra1*10)+cifra2)*10)*10+cifra3*10= //открываем скобки ((cifra1*10)+cifra2)*10*10+cifra3*10= //открываем скобки ((cifra1*10)+cifra2)*100+cifra3*10= //упрощаем (cifra1*10)*100+cifra2*100+cifra3*10= //открываем скобки cifra1*1000+cifra2*100+cifra3*10 //упрощаем |
||||
|
|||||
| ptr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 661 Регистрация: 31.5.2006 Где: Новосибирск Репутация: 1 Всего: 14 |
Если хочешь улучшить код, то добавь проверку аргумента. Чтобы такое например
возвращало скажем 0. -------------------- Единственный способ определить границы возможного - это выйти за эти границы, в невозможное. Артур Кларк. |
|||
|
||||
| MAKCim |
|
||||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
Добавлено @ 15:45
имхо, плохо если в стиле C++ - лучше exception Это сообщение отредактировал(а) MAKCim - 9.8.2006, 15:50 -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
||||
|
|||||
| maksr |
|
|||
![]() Lizard King ![]() Профиль Группа: Участник Сообщений: 60 Регистрация: 17.2.2005 Где: Нижний Новгород Репутация: нет Всего: 1 |
То All, Спасибо, буду разбираться.
|
|||
|
||||
| ptr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 661 Регистрация: 31.5.2006 Где: Новосибирск Репутация: 1 Всего: 14 |
Знаю что плохо. Просто я не заментил, что код был на C++ да и так делает atoi (хотя и не всегда). Надо было написать "корректно обрабатывались" чтобы не придирались Это сообщение отредактировал(а) ptr - 10.8.2006, 05:15 -------------------- Единственный способ определить границы возможного - это выйти за эти границы, в невозможное. Артур Кларк. |
|||
|
||||
| Oleg_Ci |
|
||||||
![]() Friend ![]() ![]() Профиль Группа: Участник Сообщений: 485 Регистрация: 28.5.2006 Где: Новосиб.обл. Репутация: 3 Всего: 30 |
Это сообщение отредактировал(а) Олег4 - 9.8.2006, 17:52 |
||||||
|
|||||||
| maksr |
|
|||
![]() Lizard King ![]() Профиль Группа: Участник Сообщений: 60 Регистрация: 17.2.2005 Где: Нижний Новгород Репутация: нет Всего: 1 |
Переделал.
Добавлено @ 23:11 |
|||
|
||||
| ptr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 661 Регистрация: 31.5.2006 Где: Новосибирск Репутация: 1 Всего: 14 |
-------------------- Единственный способ определить границы возможного - это выйти за эти границы, в невозможное. Артур Кларк. |
|||
|
||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 19 Всего: 360 |
PS: Как всё-таки atoi красиво написана... |
|||
|
||||
| Dragon |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 10.8.2006 Где: Киев Репутация: нет Всего: нет |
Посвящяется не переписыванию кода atoi(), а улучшению кода по конверции типов в С++, потому что как не периписывай atoi() суть от этого не сильно изменяется
В Boost'е есть такая маленькая функция - lexical_cast - кроссплатформенный аналог всем convert функциям. Используется таким образом:
Я написал также маленький вспомогательный класс для этих целей:
Не уверен, что у меня есть полное право вносить его в namespace std, но там он смотрится органично. Стоило бы его наследовать от std::basic_string и сделать соотвествующим шаблоном, конечно, но пока так. Используется очень просто:
В последнем примере MySQL client возвращает все значения в виде С строк и очень удобным оказывается возвращать значения в виде convert_string - это позволяет присваивать их непосредственно переменным с базовыми типами, без явной конвертации. По поводу возврата в inline функции объекта по значению и надежды на оптимизацию компилятора: 1. Нужно убедиться, что компилятор сделает эту функцию inline. В gcc есть соотвествующая опция "-Winline" 2. В крайнем случае можно проверить путем прямого сравнения производительности на тестовых приложениях. Это сообщение отредактировал(а) Dragon - 10.8.2006, 17:54 |
||||||
|
|||||||
| maxzone |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 15.8.2006 Репутация: нет Всего: нет |
Наверное Страуструп имел ввиду что-то вроде этого
Отработает [+/-]Число, Число, Число с дробной частью (отбрасывая дробную). Фунциональность больше этой редко требуется Это сообщение отредактировал(а) maxzone - 17.8.2006, 11:51 |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |