Искусство программирования - 10
Артем:
Вполне вероятно, что это старый баян, но лично я был приятно удивлен, когда увидел, как коротко и красиво может быть реализована функция strcpy. Предполагается, что передаются заведомо корректные значения и в строке destination достаточно места, чтобы произвести копирование.
Код:
char *strcpy (char *destination, const char *source)
{
// Коротко и красиво
}
LazarusLong:
Если мне не изменяет склероз этот, и другие алгоритмы я рассказывал в рамках курса "Алгоритмы и структуры данных", когда еще преподавал))
Код:
char *strcpy (char *destination, const char *source)
{
for(int i = 0; (destination[i] = source[i]) != 0; i++);
return destination;
}
Аналогичные в одну строчку алгоритмы есть и для strlen, strcmp и т.д.
Кстати подозреваю, что именно так strcpy и реализована.
Артем:
LazarusLong, хороший вариант реализации, короткий, и визуально сразу понятный, но есть еще способ, более короткий, но менее понятный на первый взгляд.
LazarusLong:
Цитата: Артем от Август 05, 2012, 01:39:38
LazarusLong, хороший вариант реализации, короткий, и визуально сразу понятный, но есть еще способ, более короткий, но менее понятный на первый взгляд.
хм, был уверен, что речь шла именно о том варианте, что я предложил) завтра подумаю, сейчас уже глаза слипаются)
(Отправлено в: Август 05, 2012, 02:41:22 )
вспомнил еще такой вариант
Код:
char *strcpy (char *destination, const char *source)
{
char *temp = destination;
while(*destination++ = *source++);
return temp;
}
Артем:
Да, именно его я и имел ввиду) По количеству строк он на одну больше, чем предыдущий вариант, но строка, в которой происходит копирование, смотрится всё же компактнее (имхо).
Навигация