int find_substring(char s[], char p[])
{
int i, j, N, M;
N = strlen(s);
M = strlen(p);
int *d = (int*)malloc(M*sizeof(int)); /* динамический массив длины М*/
/* Вычисление префикс-функции */
d[0] = 0;
for (i = 1, j = 0; i<M; i++)
{
while (j>0 && p[j] != p[i])
j = d[j - 1];
if (p[j] == p[i])
j++;
d[i] = j;
}
/* поиск */
for (i = 0, j = 0; i<N; i++)
{
while (j>0 && p[j] != s[i])
j = d[j - 1];
if (p[j] == s[i])
j++;
if (j == M)
{
free(d); /* освобождение памяти массива d */
return i - j + 1;
}
}
free(d); /* освобождение памяти массива d */
return -1;
}
char* AddID(char *str, char *name, int k)
{
int join = find_substring(str, name);
if (join != -1)
{
// 1) Выделяем память размером strlen(myString) + strlen(subString) + 1
char name[8];
sprintf_s(name, "[%d]", k);
int Size, Size3;
Size = strlen(str) + strlen(name) + 1;
Size3 = strlen(str) - join;
char *returnChar = new char[Size];
char *temp = new char[Size3];
// 2) Копируем туда часть строки myString до символа n - 1
strncpy(returnChar, str + 0, join);
returnChar[join] = '\0';
// 3) Копируем туда subString
strcat(returnChar, name);
// 4) Копируем туда часть myString от символа n до конца
strncpy(temp, str + join, strlen(str) - join);
temp[strlen(str) - join] = '\0';
strcat(returnChar, temp);
return returnChar;
}
else return str;
}