Удалить из строки 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; }
Объяснение кода листинга программы
- В функции remove_last определены две переменные: указатель p и две переменные n и m, которые инициализируются функциями strlen.
- Если длина строки s0 больше или равна длине строки s, то переменная p устанавливается равной s + m.
- Если длина строки s0 меньше длины строки s, то переменная p устанавливается равной s + m - n.
- Если p равен s + m, то уменьшаем его на единицу.
- В цикле for происходит сравнение каждой подстроки s, начиная с p, с s0.
- Если подстрока совпадает с s0, то она заменяется на следующую подстроку s, начиная с p + n.
- Функция возвращает s.
- В функции main создаются две строки: s и s0.
- Строка s инициализируется как
IPX, IPX, SPX (IPX)
. - Строка s0 инициализируется как
IPX
. - Выводится сообщение
Enter S:
и с помощью функции scanf вводится строка s. - Выводится сообщение
Enter S0:
и с помощью функции scanf вводится строка s0. - Выводится сообщение
Before:
и выводится строка s. - Выводится сообщение
After:
и выводится результат функции remove_last(s, s0). - Программа ожидает нажатия символа, чтобы продолжить выполнение.
- Программа завершается и возвращает 0.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д