Заменить в строке S последнее вхождение строки S1 на строку S2 - C (СИ) (74492)
Формулировка задачи:
Помогите написать программу,пожалуйста
Вообще не знаю как решить...
Задача:
Даны строки S,S1,S2. Заменить в строке S последнее вхождение строки S1 на строку S2. Вспомогательный символьный массив не использовать!
Решение задачи: «Заменить в строке S последнее вхождение строки S1 на строку S2»
textual
Листинг программы
#include <stdio.h>
#include <string.h>
void func(char *s, const char *s1, const char *s2)
{
char *p1 = s, *p2 = NULL;
while ((p1 = strstr(p1, s1)) != NULL && *p1 != '\0')
{
p2 = p1;
p1++;
}
if (p2 != NULL)
{
strncpy(p2, s2, strlen(s2));
}
}
int main(void)
{
// Если искомая и заменяемая
// строка равны по длине
char s[BUFSIZ] = "asd asd asd sdfg";
char s1[BUFSIZ] = "asd";
char s2[BUFSIZ] = "123";
func(s, s1, s2);
puts(s);
return 0;
}
Объяснение кода листинга программы
- В функции func происходит замена последнего вхождения строки s1 на строку s2 в строке s.
- В функции func используется функция strstr, которая ищет первое вхождение подстроки s1 в строке s.
- Если подстрока найдена, то в функции func происходит копирование строки s2 начиная с позиции, где найдена подстрока s1.
- В функции main создается строка s, содержащая
asd asd asd sdfg. - В функции main создаются строки s1 и s2, содержащие
asdи123соответственно. - Функция func вызывается с аргументами s, s1 и s2.
- Результат работы функции func выводится на экран с помощью функции puts.
- Программа возвращает 0, что означает успешное завершение работы.