Удалить из строки S последнюю подстроку, совпадающую с S0 - C (СИ) (72058)
Формулировка задачи:
Даны строки S и S0. Удалить из строки S последнюю подстроку, совпадающую с S0. Если совпадающих подстрок нет, то вывести строку S без изменений.
Решение задачи: «Удалить из строки S последнюю подстроку, совпадающую с S0»
textual
Листинг программы
#include <stdio.h> #include <string.h> char* str_remove_end(char* s, const char* w){ char* a, *b, *t = s; size_t n = strlen(w); a = b = strstr(s, w); while(b != NULL){ a = b; b += n; b = strstr(b, w); } if(a != NULL) strcpy(a, a + n); return t; } int main(void){ char s[] = "APL ADA APL ADA END"; char w[] = "APL"; puts(s); puts( str_remove_end(s, w) ); return 0; }
Объяснение кода листинга программы
- В функции
str_remove_end
мы объявляем два указателяa
иb
и инициализируем их значением первого вхождения подстрокиw
в строкеs
. - Мы также инициализируем переменную
t
значением исходной строкиs
. - Затем мы находим последнее вхождение подстроки
w
в строкеs
используя функциюstrstr
и обновляем значения указателейa
иb
. - Если
b
не равенNULL
, это означает, что мы нашли еще одно вхождение подстрокиw
в строкеs
. Мы сдвигаем указательa
вперед на длину подстрокиw
, а затем обновляем значениеb
чтобы он указывал на следующее вхождение подстрокиw
. - Мы продолжаем этот процесс до тех пор, пока не найдем последнее вхождение подстроки
w
в строкеs
. - Если
a
не равенNULL
, это означает, что мы нашли последнее вхождение подстрокиw
в строкеs
. Мы копируем значениеa
вa + n
, чтобы удалить последнее вхождение подстрокиw
из строкиs
. - Наконец, мы возвращаем исходную строку
s
без последнего вхождения подстрокиw
. - В функции
main
мы объявляем строкуs
и подстрокуw
. - Мы выводим исходную строку
s
с помощью функцииputs
. - Мы вызываем функцию
str_remove_end
с аргументамиs
иw
и сохраняем результат в переменнойresult
. - Мы выводим результат с помощью функции
puts
. - Мы возвращаем
0
, чтобы указать, что программа успешно завершилась.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д