Задача. Очень часто для работы со строками нам нужно сначала вычислить длину строки. Для C-style строк длина нигде явно не хранится, но её можно вычислить. Напишите функцию, которая вычисляет длину C-style строки. Учтите, что завершающий нулевой символ считать не нужно.
Требования к реализации: при выполнении этого задания вы можете создавать любые вспомогательные функции. Вводить или выводить что-либо не нужно. Реализовывать функцию main не нужно.
Решение.
unsigned strlen(const char *str)
{
if(*str)
return 1 + strlen(++str);
else
return 0;
}
Вопросу у меня такой - Для чего нужна единица? Понимаю что идет рекурсия, но зачем нам складывать с единицей? Также если будет у кого-то другой способ решения, буду рад узнать.
Начинающий в плюсах, так что прошу сторого не ссудить
Суть подобного (рекурсивного) решения в том, что мы не знаем длину всей строки, однако мы можем взять подстроку длиной на 1 меньше и вернуть 1 + функция, т.е. мы повторяем эту операцию, пока нашу подстроку будет куда уменьшать (длина подстроки - 1 != 0), параллельно добавляя в рекурсивную лестницу 1 (я стараюсь объяснить как можно понятнее, возможны неточности). Потом, когда выполняется крайний случай, функция собирает все эти единицы по стэку и получается 1 + 1 + 1 + 1.... Вот и все. Таким же образом с помощью рекурсии можно найти количество членов последовательности.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей