Проверка, все ли слова в строке имеют чередующуюся четную и нечетную длину - C (СИ)
Формулировка задачи:
Решение задачи: «Проверка, все ли слова в строке имеют чередующуюся четную и нечетную длину»
#include <stdio.h> #include <ctype.h> #define is_delim(c) (isspace((c)) || ispunct((c))) #define N_EVEN 1 #define N_ODD 2 int is_altern(const char* s){ const char* p; int j, n = 0, i = 0, r = (*s != '\0'); for(; *s; s = p){ while(is_delim(*s)) ++s; for(p = s; *p && !is_delim(*p); ++p) ; if((j = (int)(p - s)) > 0){ if(j & 1) i = N_ODD; else i = N_EVEN; if(i != n) n = i; else { r = 0; break; } } } return r; } int main(void){ puts( is_altern("lisp, apl, pascal.") ? "yes" : "no"); puts( is_altern("titan moon (venus)") ? "yes" : "no"); puts( is_altern("Forth Java Prolog") ? "yes" : "no"); return 0; }
Объяснение кода листинга программы
В этом коде проверка на чётное и нечётное количество букв в каждом слове строки. Если все слова удовлетворяют этому условию, выводится yes
, иначе — no
. Каждое вводимое слово принимается за начало нового слова, пока не встретится новое слово или конец строки. Для этого используется функция is_altern, которая принимает два аргумента: первое — это указатель на начало строки, а второе — указатель на текущий символ в строке. Функция is_delim используется для определения, является ли текущий символ разделителем. Она возвращает ненулевой результат, если текущий символ является пробелом, знаками препинания или цифрой. Используются также две константы: N_EVEN — «чётное», N_ODD — «нечётное».
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д