Удалить из строки S последнюю подстроку, совпадающую с S0 - C (СИ) (72058)

Узнай цену своей работы

Формулировка задачи:

Даны строки S и S0. Удалить из строки S последнюю подстроку, совпадающую с S0. Если совпадающих подстрок нет, то вывести строку S без изменений.

Решение задачи: «Удалить из строки S последнюю подстроку, совпадающую с S0»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. char* str_remove_end(char* s, const char* w){
  5.     char*  a, *b, *t = s;
  6.     size_t n = strlen(w);
  7.  
  8.     a = b = strstr(s, w);
  9.     while(b != NULL){
  10.         a  = b;
  11.         b += n;
  12.         b  = strstr(b, w);
  13.     }
  14.    
  15.     if(a != NULL)
  16.         strcpy(a, a + n);
  17.     return t;
  18. }
  19.  
  20. int main(void){
  21.     char s[] = "APL ADA APL ADA END";
  22.     char w[] = "APL";
  23.     puts(s);
  24.     puts( str_remove_end(s, w) );
  25.     return 0;
  26. }

Объяснение кода листинга программы

  1. В функции str_remove_end мы объявляем два указателя a и b и инициализируем их значением первого вхождения подстроки w в строке s.
  2. Мы также инициализируем переменную t значением исходной строки s.
  3. Затем мы находим последнее вхождение подстроки w в строке s используя функцию strstr и обновляем значения указателей a и b.
  4. Если b не равен NULL, это означает, что мы нашли еще одно вхождение подстроки w в строке s. Мы сдвигаем указатель a вперед на длину подстроки w, а затем обновляем значение b чтобы он указывал на следующее вхождение подстроки w.
  5. Мы продолжаем этот процесс до тех пор, пока не найдем последнее вхождение подстроки w в строке s.
  6. Если a не равен NULL, это означает, что мы нашли последнее вхождение подстроки w в строке s. Мы копируем значение a в a + n, чтобы удалить последнее вхождение подстроки w из строки s.
  7. Наконец, мы возвращаем исходную строку s без последнего вхождения подстроки w.
  8. В функции main мы объявляем строку s и подстроку w.
  9. Мы выводим исходную строку s с помощью функции puts.
  10. Мы вызываем функцию str_remove_end с аргументами s и w и сохраняем результат в переменной result.
  11. Мы выводим результат с помощью функции puts.
  12. Мы возвращаем 0, чтобы указать, что программа успешно завершилась.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.9 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы