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

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

  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
Похожие ответы