![]() |
|
Модераторы: bsa |
![]()
|
|
| MGami |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 2.10.2013 Репутация: нет Всего: нет |
Добрый день! Друг прислал ссылку с задачей на языке С. Показалось - очень простая. На деле - совсем нет.
Условия тут: http://hola.org/jobs_ru.html Дорешал до:
и застрял. Прошу помощи. Если решиам - приз отдам, не в призу уже дело:))) Или сами попробуйте... Модератор: Не забываем пользоваться кнопочкой "код". Это сообщение отредактировал(а) bsa - 2.10.2013, 22:04 |
|||
|
||||
| feodorv |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Какой-то развод
или нужно "эффективнее":
Это сообщение отредактировал(а) feodorv - 2.10.2013, 13:08 -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
||||
|
|||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
60 x $500 = $30,000 Походу, у них перерасход бюджета уже. И кстати, почему только в израиле? Что, в других странах не нашлось программистов способных решить столь сложную задачу? |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
они пишут, что решившие не с первого раза по 250 получают, так что с арифметикой в порядке.
но денег осталось мало, спешите |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
MGami, feodorv, у вас лишние ресурсы тратятся на измерение длины строки. strcpy работает медленней memcpy. А длина строки все равно вычисляется. Более того, можно использовать realloc для выделения памяти.
|
|||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
||||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
volatile, memmove лучше не использовать. Так как это уже неоптимально - лишняя буферизация.
|
|||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
В варианте предложенным feodorv, нет разговора, лучше или хуже. Мы там просто обязаны использовать memmove, потому-что у них в примере есть такой вызов:
нет никокой лишней буферизации, мы уже это обсуждали с вами. |
|||
|
||||
| MGami |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 2.10.2013 Репутация: нет Всего: нет |
Вот тут прикольные размышления на эту тему и, кстати, о том, кто уже получил бабки:)))
http://habrahabr.ru/post/193308/ |
|||
|
||||
| akizelokro |
|
||||||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: 1 Всего: 5 |
Я вообще не уверен в порядке вычисления в строках, инициализируемых в параметрах (но я не особо лихой программист, если по чесноку).
Я что-то всегда считал, что подобная конструкция
может в разных компиляторах исполняться либо как
либо как
Добавлено @ 15:26 Отсюда я бы начал с того, что сигнатура функций должна быть другой. Но если меня подправят знающие люди, то я избавлюсь от одного заблуждения, что уже прогресс Это сообщение отредактировал(а) akizelokro - 3.10.2013, 15:28 -------------------- a = a + b; b = a - b; a = a - b; |
||||||
|
|||||||
| volatile |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
К слову, подобная конструкция вообще не скомпилируеца, но не будем придирацца вы видимо имели ввиду вызов функции:
Здесь порядок будет именно таким: const char * temp = "Hola Hola"; func(dest, temp); А то что вы слышали звон про неопределенность порядка вычисления аргуметнов функций, то не от туда он. Неопредееленность здесь в том что неизвестно, что вычислится первым dest или temp |
||||
|
|||||
| akizelokro |
|
|||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: 1 Всего: 5 |
Спасибо большое! -------------------- a = a + b; b = a - b; a = a - b; |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Я бы сделал как-то так:
В str_cpy нельзя использовать realloc, так как он сделает неверным указатель src. |
|||
|
||||
| feodorv |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Ну да, однозначно memmove. Я просто хотел понять, что "идеальнее" с точки зрения hola.org: использовать старую память, если в неё влезает строка (а единственный доступный способ - сравнить длины строк), или лучше каждый раз перезаказывать память
Куда там 7 строк для str_cpy, если делаем банальный strdup.
Можно проверять перекрытие строк Мне почему-то кажется, что str_free проверит аргумент на NULL. И таки str_free(dst)... -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
||||
|
|||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
feodorv, проверку перекрытия строк без своего аллокатора не напишешь.
А вот у меня нет уверенности, что str_free делает проверку. |
|||
|
||||
![]()
|
| Правила форума "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. |