![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
ИванМ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1260 Регистрация: 19.6.2006 Где: СПб Репутация: 1 Всего: 23 |
Есть такой код. На входе число в формате xxxEyyy, на выходе xxx000..... Как его можно оптимизировать?
Это сообщение отредактировал(а) ИванМ - 15.4.2010, 23:54 |
|||
|
||||
djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 8 Всего: 39 |
Число или все же строка? Или в коде строка только потому, что не можете с числом?
-------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
ИванМ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1260 Регистрация: 19.6.2006 Где: СПб Репутация: 1 Всего: 23 |
djamshud, строка. Число нельзя потому что может быть любая размерность.
|
|||
|
||||
djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 8 Всего: 39 |
Вроде бы std::string позволяет работать напрямую с char*-данными. Тогда еще и strlen заменится на оптимальный str.length(). -------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
jonie |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 15 Всего: 118 |
не, ну если просто заменять то зачем парсить в int n что-то? банальный алгоритм какой-то такой:
UPD: кстати:
Это сообщение отредактировал(а) jonie - 16.4.2010, 00:25 -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
||||
|
|||||
ИванМ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1260 Регистрация: 19.6.2006 Где: СПб Репутация: 1 Всего: 23 |
djamshud, а нельзя C++ средствами? Не люблю я Си.
|
|||
|
||||
jonie |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 15 Всего: 118 |
djamshud, не факт что можно делать memcpy в возращенный указатель, т.е. надо почитать, не возращает ли он константный указатель, а-то малоли как там внутри stl сделано...(возможно в некоторых реализациях вам будут давать например копию буфера, надо читать)
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 8 Всего: 39 |
ИванМ, а я не умею stl. Но тот пример можно пропатчить на предмет std::string и он будет наверное крайне оптимальным.
Добавлено через 1 минуту и 19 секунд jonie, если в std::string есть способ получить возможность работы напряму с внутренним буфером, то проблем не будет, т.к. изменения его размеров не происходит. -------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
jonie |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 15 Всего: 118 |
djamshud, прочти еще разок что я написал, в частности про теневую копию, а еще бывает copy-on-write и вы можете своей записью по указателю заколбасить заодно и ссылаемые строки... в общем ябы почитал что можно, а что низя ...
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 8 Всего: 39 |
jonie, я внимательно читал, не сыпьте терминами. А сейчас прочитал описание этой строки, там предусмотрен доступ только для чтения (char const*). С ним работать опасно.
-------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
решение в лоб, чтоб долго не думать :
|
|||
|
||||
ИванМ |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1260 Регистрация: 19.6.2006 Где: СПб Репутация: 1 Всего: 23 |
jonie,
Не рабочий ваш код. И если не парсить в int, то как мы узнаем количество символов? По любому надо переводить из string в int (а лучше конечно в size_t для моего случая). string::replace только заменяет уже имеющиеся данные, которых у меня нет. Вот с append(size_t, char) можно сократить код. find_first_of тоже нельзя использовать, потому что может быть как 'e', так и 'E'. djamshud, на сколько я знаю, нельзя работать в string с внутренним буфером. mes, Это очень медленно будет работать. И, кстати, ваш код тоже не рабочий. Пока так сделал:
Может я как то не так задачу описал. Например, если строка=1e4, то должно быть на выходе: 10000. Это сообщение отредактировал(а) ИванМ - 16.4.2010, 00:49 |
||||
|
|||||
jonie |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 15 Всего: 118 |
djamshud, эт не термины - эт реальная жизнь.
Для тех кто не вкурсе что такое copy-on-write это методика, когда например вы делаете копию строки, но реально буфер остается тот же самый, а вы по сути получаете пустышку, с буфером указывающим на буфер другой строки + для каждой ссылаемой сущьности проставляется признак "есть ссылка". Когда вы начинаете что-то менять в строке, тог проверяется этот признак, и, если он установлен, то производится создание нового буфера, копирование в него старого и изменение уже его (нового). Типа "копирование при записи". Эффективно экономит память, добавляет сложности при программировании, сложности отладки при перезаписи чужих данных, зачастую скорость падает... -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
подправляю :
![]() |
|||
|
||||
jonie |
|
||||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 15 Всего: 118 |
ИванМ, у меня не код, а псевдокод.
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
||||||||
|
|||||||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |