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

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

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

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

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

textual
Листинг программы
#include <stdio.h>
#include <string.h>
 
char* remove_last(char* s, const char* s0){
    char*  p;
    size_t n, m;
 
    n = strlen(s0);
    m = strlen(s);
    p = s + m;
 
    if(m > n)
        p -= n;
 
    if(p == s + m)
        --p;
 
    for(; p >= s; --p){
        if(strncmp(p, s0, n) == 0){
            strcpy(p, p + n);
            break;
        }
    }
    return s;
}
 
int main(void){
    char s[128] = "IPX, IPX, SPX (IPX)";
    char s0[32] = "IPX";
/*
    printf("Enter S: ");
    scanf("%127[^\n]", s);
 
    printf("Enter S0: ");
    scanf("%31[^\n]", s0);
*/
    puts( remove_last(s, s0) );
    getchar();
    return 0;
}

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

  1. В функции remove_last определены две переменные: указатель p и две переменные n и m, которые инициализируются функциями strlen.
  2. Если длина строки s0 больше или равна длине строки s, то переменная p устанавливается равной s + m.
  3. Если длина строки s0 меньше длины строки s, то переменная p устанавливается равной s + m - n.
  4. Если p равен s + m, то уменьшаем его на единицу.
  5. В цикле for происходит сравнение каждой подстроки s, начиная с p, с s0.
  6. Если подстрока совпадает с s0, то она заменяется на следующую подстроку s, начиная с p + n.
  7. Функция возвращает s.
  8. В функции main создаются две строки: s и s0.
  9. Строка s инициализируется как IPX, IPX, SPX (IPX).
  10. Строка s0 инициализируется как IPX.
  11. Выводится сообщение Enter S: и с помощью функции scanf вводится строка s.
  12. Выводится сообщение Enter S0: и с помощью функции scanf вводится строка s0.
  13. Выводится сообщение Before: и выводится строка s.
  14. Выводится сообщение After: и выводится результат функции remove_last(s, s0).
  15. Программа ожидает нажатия символа, чтобы продолжить выполнение.
  16. Программа завершается и возвращает 0.

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


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

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

15   голосов , оценка 4.2 из 5
Похожие ответы