Удалить подстроку из строки - C (СИ)
Формулировка задачи:
Даны строки S и S0. Удалить из строки S последнюю подстроку, сов падающую с S0. Если
совпадающих подстрок нет, то вывести строку S без изменений.
Код удаляет первую подстроку, подскажите как удалить последнюю подстроку?
#include <stdio.h> #include <string.h> int main() { int t,i,j; char s1[200]; char s2[100]; char *p; printf("Enter first string: "); gets(s1); printf("Enter second string: "); gets(s2); p = strstr(s1,s2); if (p){ for (i=0; i<strlen(s2);i++) for(j=0; j<strlen(s1);j++) p[j]=p[j+1]; } printf("%s\n",s1); getchar(); return 0; }
Решение задачи: «Удалить подстроку из строки»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <string.h> char* change_str(char *s1,char *s2) { char *lastP,*p; //int le,i; p = strstr(s1,s2); while (p) { lastP=p++; p=strstr(p,s2); } if (lastP) { strcpy(lastP,lastP+strlen(s2)); } return s1; } int main() { char buf[256]; char s2[100]; strcpy(buf,"bb55aa66cc77bbdefg"); strcpy(s2,"bb"); change_str(buf,s2); printf("\n%s",buf); }
Объяснение кода листинга программы
В данном коде представлен функция change_str
, которая принимает два аргумента типа char*
— s1
и s2
. Функция ищет подстроку s2
в строке s1
и заменяет все вхождения этой подстроки на пустую строку.
Вот список действий, которые происходят в коде:
- Вызов функции
strstr
с аргументамиs1
иs2
для поиска первого вхождения подстрокиs2
в строкеs1
. - Если подстрока найдена, то сохраняем адрес последнего символа подстроки в переменную
lastP
. - Переходим к следующему вхождению подстроки, вызывая функцию
strstr
с аргументамиp
иs2
. - Если следующее вхождение подстроки найдено, то обновляем значение
lastP
и переходим к следующему шагу. Если следующее вхождение не найдено, то возвращаемlastP
. - Если
lastP
не равноNULL
, то копируем символы, начиная сlastP
и до конца строки, в переменнуюlastP
. - Возвращаем исходную строку
s1
. В функцииmain
создается буферbuf
с заданной строкой, а также строкаs2
с подстрокой, которую необходимо удалить. Затем вызывается функцияchange_str
с аргументамиbuf
иs2
. Результат выводится на экран с помощью функцииprintf
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д