Уничтожить в строке все вхождения подстроки - C (СИ)
Формулировка задачи:
Заданная строка символов. Уничтожить в нем все вхождения подстроки 'Y + Z ".
Решение задачи: «Уничтожить в строке все вхождения подстроки»
textual
Листинг программы
#include <stdio.h>
#include <string.h>
char* str_remove(char* s, const char* o){
size_t n;
char* p, *t = s;
if((s = strstr(s, o)) == NULL)
return t;
n = strlen(o);
for(p = s; *s; *s = *p){
if(! strncmp(p, o, n)){
p += n;
continue;
} else
++s;
++p;
}
return t;
}
int main(void){
char s[] = "x + yx + y(x + y) / (x + y)x ";
puts( str_remove(s, "x + y") );
return 0;
}
Объяснение кода листинга программы
В данном коде реализована функция str_remove, которая принимает два аргумента: строку s, в которой необходимо удалить подстроку o.
В функции происходит следующее:
- Проверка: является ли подстрока
oчастью строкиs. Если нет, то возвращается исходная строкаs. - Определяется длина подстроки
o. - В цикле происходит сравнение каждого символа строки
sс символами подстрокиo. Если символы совпадают, то происходит переход к следующему символу подстрокиoи продолжается проверка следующего символа строкиs. Если символы не совпадают, то происходит переход к следующему символу подстрокиoи продолжается проверка следующего символа строкиs. Если все символы подстрокиoпроверены и не найдено совпадений, то возвращается исходная строкаs. В функцииmainсоздается тестовая строкаs, содержащая подстрокуx + y. Затем вызывается функцияstr_removeс передачей этой строки и подстрокиx + yв качестве аргументов. Результат выводится на экран.