// НИЖЕ ПРИВЕДЕНЫ КОММЕНТАРИИ ДЛЯ ТИМОХИ
//include "stdafx.h"
#include<iostream>
using namespace std;
const int minn = 4; //минимальный отрезок
int k = 0; //счетчик длины отрезка
char *func(char *n){ //* перед функцией означает, что вернется указатель
int maxn = 0;
char *m; //переменная которая перебирает элементы от начала и до конца
char *s = NULL; //выводимый указатель, изначально равен NULL, и останется нул если ничего не произойдет
char *p; //начало отрезка, если он равен m, то увеличивается вместе с m, если не равен то остается прежним,пока не найдется такое m равное ему.
p = n; m = n + minn;
for (int i = 0; *m != '\0'; m++, i++){ //перебор от начала полученной строки до конца
if (*p == *m){
p++; //p увеличивается вместе с m, чтобы проверить следующие схожие элементы
k++; //длина отрезка увеличивается
if (k >= minn){ //если устраивает промежуток, то s присваиваем начало полученной строки
s = n;
if (i > maxn) maxn = i;
}
}
else{ // фрагменты не удовлетворяют, тогда p снова получает значение первого элемента,а k обнуляется
p = n;
k = 0;
i = 0;
}
}
if (maxn >= minn) *(n++) = maxn;
return s;
}
int main()
{
char s[] = "abvgd abvg 23412 23412 ";
int *n[10];
char *c;
char *q[10];
for (int i = 0; i < 10; i++)
{
q[i] = NULL;
n[i] = 0;
}
for (int j = 0, i = 0; s[j + minn] != 0; j++){
c = func(&s[j]);
if (c != NULL){
q[i] = c;
i++;
}
}
for (int i = 0; q[i]!=NULL; i++)
cout << q[i] << endl <<endl;
system("pause");
return 0;
}