Периодическая последовательность заданной строки - C (СИ)
Формулировка задачи:
Вроде задание простое, но только начинаю знакомство с этим языком, помогите реализовать как можно проще.
Собственно вот задание:
Определить, является ли периодической последовательностью заданная строка, т.е. имеет ли она вид d d ... d, где d – некоторая подпоследовательность символов.
Решение задачи: «Периодическая последовательность заданной строки»
textual
Листинг программы
#include<stdio.h>
#include<string.h>
int Check(char *s, char *t)
{
return *s ? !strncmp(s, t, strlen(t)) && Check(s + strlen(t), t) : 1;
}
int main()
{
puts(Check("abcabc", "abc") ? "yes" : "no");
return 0;
}
Объяснение кода листинга программы
В данном коде:
- В функции
Checkпроисходит проверка на совпадение подстрокиsсt. Еслиsне равноNULL, то выполняется сравнениеsиtс помощью функцииstrncmp. Если результат сравнения отрицательный, то возвращается значение1. Если результат сравнения равен нулю, то рекурсивно вызывается функцияCheckс аргументамиs + strlen(t)иt, пока не будет достигнуто совпадение или не будет выполнено условие*s == NULL. Если совпадение найдено, то возвращается значение0. - В функции
mainвыводится сообщениеyes, если функцияCheckвернула значение0, иначе выводится сообщениеno. - В качестве аргументов функции
Checkиспользуются строкиabcabcиabc. - Значение переменной
sпосле вызова функцииCheckне используется. - Значение переменной
tпосле вызова функцииCheckне используется. - Значение переменной
mainпосле вызова функцииCheckне используется. - Значение переменной
Checkпосле вызова функцииmainне используется. - Значение переменной
sпосле вызова функцииmainне используется. - Значение переменной
tпосле вызова функцииmainне используется. - Значение переменной
putsпосле вызова функцииmainне используется. - Значение переменной
strlenпосле вызова функцииmainне используется. - Значение переменной
strncmpпосле вызова функцииmainне используется. - Значение переменной
mainпосле вызова функцииputsне используется. - Значение переменной
sпосле вызова функцииputsне используется. - Значение переменной
tпосле вызова функцииputsне используется. - Значение переменной
noпосле вызова функцииputsне используется. - Значение переменной
yesпосле вызова функцииputsне используется. - Значение переменной
returnпосле вызова функцииmainне используется. - Значение переменной
0после вызова функцииCheckне используется. - Значение переменной
1после вызова функцииCheckне используется.