rrrFer » 18 мар 2010, 22:13
Код: Выделить всё
char* f(char *s, char *s0, int k, int pos, int pos0,int lastlen){
if(k<=0)
return &s[0];
if(!s0[pos0])
return k==1?&s[pos-lastlen]:f(s,s0,k-1,pos,pos0+1,0);
if(!s[pos])
return "";
if(s0[pos0]==s[pos])
return f(s,s0,k,pos+1,pos0+1,lastlen+1);
return f(s,s0,k,pos-lastlen+1,0,0);
}
это если надо вернуть, начиная с k-того вхождения - предыдущий код был после вхождения.
Первое условие выполняется при некорректном k
второе если найдено очередное вхождение
третье если первая строка кончилась
четвертое если очередной символ строк совпадает
Если ни одно условие не выполнилось - переходим к следующему символу - для этого считали длину последней не совпавшей последовательности(Lastlen)
Если выполнилось первое условие - вернем всю строку целиком - можно вернуть сообщение об ошибке
Если второе то надо уменьшить количество вхождений, которые осталось найти и перейти на следующий символ в обеих строках без отката назад на длину последней последовательности, т.к. последовательности совпали полностью
Если третье - значит, в первой строке нет достаточного количества вхождений второй строки - возвращаем пустую строку
Ну и если четвертое - переходим на следующий символ во всех последовательностях
[code]char* f(char *s, char *s0, int k, int pos, int pos0,int lastlen){
if(k<=0)
return &s[0];
if(!s0[pos0])
return k==1?&s[pos-lastlen]:f(s,s0,k-1,pos,pos0+1,0);
if(!s[pos])
return "";
if(s0[pos0]==s[pos])
return f(s,s0,k,pos+1,pos0+1,lastlen+1);
return f(s,s0,k,pos-lastlen+1,0,0);
}[/code]
это если надо вернуть, начиная с k-того вхождения - предыдущий код был после вхождения.
Первое условие выполняется при некорректном k
второе если найдено очередное вхождение
третье если первая строка кончилась
четвертое если очередной символ строк совпадает
Если ни одно условие не выполнилось - переходим к следующему символу - для этого считали длину последней не совпавшей последовательности(Lastlen)
Если выполнилось первое условие - вернем всю строку целиком - можно вернуть сообщение об ошибке
Если второе то надо уменьшить количество вхождений, которые осталось найти и перейти на следующий символ в обеих строках без отката назад на длину последней последовательности, т.к. последовательности совпали полностью
Если третье - значит, в первой строке нет достаточного количества вхождений второй строки - возвращаем пустую строку
Ну и если четвертое - переходим на следующий символ во всех последовательностях