Вчера был на собеседовании и попросили реализовать strlen() на C без использования стандартных функций, все руками. Как абсолютный любитель, я реализовал примитивную версию с циклом while. Глядя на это, мой интервьюер сказал, что это можно реализовать всего одной строкой кода. В тот момент я не мог создать этот код, используя этот термин. После собеседования я спросил своих коллег, и самые опытные из них дали мне эту штуку, которая действительно отлично работала:
size_t str_len (const char *str)
{
return (*str) ? str_len(++str) + 1 : 0;
}
Так вот вопрос, можно ли без использования рекурсии, и если да, то как? Условия:
- без всякого ассемблера
- без каких-либо функций C, существовавших в библиотеках
- без написания нескольких строк кода в одном
Обратите внимание, что это не вопрос оптимизации или реального использования, а просто возможность сделать задачу выполненной.
size_t strlen(const char *str, size_t acc = 0) { return *str ? strlen(str+1, acc + 1) : acc; }
Это должно быть скомпилировано в цикл, я думаю - person Niklas B.   schedule 20.03.2014