Удалить подстроку из строки - 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.