Название: Искусство программирования - 10 Отправлено: Артем от Август 05, 2012, 01:21:29 Вполне вероятно, что это старый баян, но лично я был приятно удивлен, когда увидел, как коротко и красиво может быть реализована функция strcpy. Предполагается, что передаются заведомо корректные значения и в строке destination достаточно места, чтобы произвести копирование.
Код: char *strcpy (char *destination, const char *source) Название: Re: Искусство программирования - 10 Отправлено: LazarusLong от Август 05, 2012, 01:31:12 Если мне не изменяет склероз этот, и другие алгоритмы я рассказывал в рамках курса "Алгоритмы и структуры данных", когда еще преподавал))
Код: char *strcpy (char *destination, const char *source) Аналогичные в одну строчку алгоритмы есть и для strlen, strcmp и т.д. Кстати подозреваю, что именно так strcpy и реализована. Название: Re: Искусство программирования - 10 Отправлено: Артем от Август 05, 2012, 01:39:38 LazarusLong, хороший вариант реализации, короткий, и визуально сразу понятный, но есть еще способ, более короткий, но менее понятный на первый взгляд.
Название: Re: Искусство программирования - 10 Отправлено: LazarusLong от Август 05, 2012, 08:40:06 LazarusLong, хороший вариант реализации, короткий, и визуально сразу понятный, но есть еще способ, более короткий, но менее понятный на первый взгляд. хм, был уверен, что речь шла именно о том варианте, что я предложил) завтра подумаю, сейчас уже глаза слипаются)(Отправлено в: Август 05, 2012, 02:41:22 ) вспомнил еще такой вариант Код: char *strcpy (char *destination, const char *source) Название: Re: Искусство программирования - 10 Отправлено: Артем от Август 06, 2012, 09:34:11 Да, именно его я и имел ввиду) По количеству строк он на одну больше, чем предыдущий вариант, но строка, в которой происходит копирование, смотрится всё же компактнее (имхо).
Название: Re: Искусство программирования - 10 Отправлено: LazarusLong от Август 06, 2012, 09:48:01 Вообще мне кажется оба варианта примерно равнозначны, что по использованию памяти. что по вычислительной сложности))
Название: Re: Искусство программирования - 10 Отправлено: tos от Август 07, 2012, 05:23:05 Ребята, вы правда считаете, что код
for(int i = 0; (destination = source) != 0; i++); return destination; хорошо понятен с первого взгляда? я вот не понял с первого раза, а где же собственно копирование. Ну а char *temp = destination; while(*destination++ = *source++); return temp; вообще адовый угар. Но, все-таки, если такое написано где-нибудь в недрах Буста, то ладно, а вот если в коде именно проекта - то надо давать по шапке Название: Re: Искусство программирования - 10 Отправлено: LazarusLong от Август 07, 2012, 07:40:03 Ребята, вы правда считаете, что код Код: for(int i = 0; (destination[i] = source[i]) != 0; i++); Ну а Код: char *temp = destination; Но, все-таки, если такое написано где-нибудь в недрах Буста, то ладно, а вот если в коде именно проекта - то надо давать по шапке я тебя понимаю, но я нигде не заметил в тексте темы призывов так писать на реальных проектах. Тема называется искусство программирования. Причем здесь ремесло промышленной разработки софта? З.Ы. И да, я считаю, что оба варианта достаточно просты и понятны для любого человека мало-мальски знакомого с тем, как работает адресная арифметика и оператор присваивания. З.Ы. 2. И да, я согласен с тем, что на реальных проектах так писать нельзя. |