Где правильно поместить инкремент - C (СИ)
Формулировка задачи:
Задача была сократить запись этой функции
мой вариант:
в ответах инкремент в операторе if:
Вопрос есть ли ли в данном случае разница где стоит инкремент?
int count_spaces(const char *s)
{
int count = 0;
for (; *s != '\0'; s++)
if (*s == ' ')
count++;
return count;
} while (*s++){
if (*s == ' ')
count++;
} while (*s){
if (*s++ == ' ')
count++;
}Решение задачи: «Где правильно поместить инкремент»
textual
Листинг программы
int Count( const TCHAR * s, int n )
{
return *s ? Count( ++s, n + (*s == L' ') ) : n;
}
Объяснение кода листинга программы
В данном коде реализована функция Count, которая принимает два аргумента: строку s и число n. Функция считает количество слов в строке s. Каждое слово в строке s отделено пробелом.
Код работает следующим образом:
- Если
sне равноNULL(то есть строка не пустая), то функция рекурсивно вызывает саму себя, увеличивая значениеsна 1 (чтобы перейти к следующему символу в строке) и увеличиваяnна 1, если текущий символ равен пробелу (чтобы учесть текущее слово). - Если
sравноNULL(то есть строка закончилась), то функция возвращает значениеn(количество слов в строке). Вот список, описывающий работу функции: - Если
sне равноNULL, то:- Увеличить
sна 1. - Вызвать функцию
Countс аргументамиsиn + (*s == L' '). - Вернуть результат вызова функции
Count.
- Увеличить
- Если
sравноNULL, то:- Вернуть значение
n.
- Вернуть значение