История изменений
Исправление Puzan, (текущая версия) :
Выложу-ка и я свой вариант. Вариант совсем не использует библиотечные вызовы. Готов к включению в общую тестилку.
char* str_drop_str(char* str, char* sub)
{
char* p_dst = str;
char* p_src = str;
char src;
char* p_sub = sub;
int sub_len = 0;
int delim = 1;
do {
src = *p_src;
if (!*p_sub && (src == ' ')) {
p_dst -= sub_len;
p_sub = sub;
sub_len = 0;
} else
if (delim && (src == *p_sub)) {
p_sub ++;
sub_len ++;
} else {
delim = (src == ' ') ? 1 : 0;
p_sub = sub;
sub_len = 0;
}
if (p_dst != p_src)
*p_dst = src;
p_src ++;
p_dst ++;
} while(*p_src);
if (!*p_sub) p_dst -= sub_len;
*p_dst = 0;
return str;
}
Можно наверное пооптимизировать слегка.
Исходная версия Puzan, :
Выложу-ка и я свой вариант. Вариант совсем не использует библиотечные вызовы. Готов к включению в общую тестилку.
char* str_drop_str(char* str, char* sub)
{
char* p_dst = str;
char* p_src = str;
char src;
char* p_sub = sub;
int sub_len = 0;
int delim = 1;
do {
src = *p_src;
if (!*p_sub && (src == ' ')) {
p_dst -= sub_len;
p_sub = sub;
sub_len = 0;
} else
if (delim && (src == *p_sub)) {
p_sub ++;
sub_len ++;
} else {
delim = (src == ' ') ? 1 : 0;
p_sub = sub;
sub_len = 0;
}
if (p_dst != p_src)
*p_dst = src;
p_src ++;
p_dst ++;
} while(*p_src);
if (!*p_sub) p_dst -= sub_len;
*p_dst = 0;
return str;
}