Искусство программирования - 10

(1/2) > >>

Артем:
Вполне вероятно, что это старый баян, но лично я был приятно удивлен, когда увидел, как коротко и красиво может быть реализована функция 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;
}

Артем:
Да, именно его я и имел ввиду) По количеству строк он на одну больше, чем предыдущий вариант, но строка, в которой происходит копирование, смотрится всё же компактнее (имхо).

Навигация

[0] Главная страница сообщений

[#] Следующая страница