Удалить заданную подстроку из исходной строки - C (СИ)
Формулировка задачи:
Помогите, пожалуйста.
Надо написать программу, которая убирает заданную подстроку из исходной строки (без различия строчных и прописных букв). В строке может быть несколько одинаковых подстрок. Вводимые данные: исходная строка, строка, которую надо убрать. Выводимые данные: измененная строка и сообщение о том, производилась замена или нет.
Решение задачи: «Удалить заданную подстроку из исходной строки»
textual
Листинг программы
#include <stdio.h>
#include <wchar.h>
#include <wctype.h>
#include <string.h>
#include <locale.h>
#include <assert.h>
wchar_t * wcscasestr(const wchar_t * str, const wchar_t * sub) {
const wchar_t * pStr = str;
const wchar_t * pSub = sub;
while ( *pSub != L'\0' && towupper((wint_t)*pStr) == towupper((wint_t)*pSub) ) {
++pStr;
++pSub;
}
return ( *pSub == L'\0' ) ? (wchar_t*)str : ( *pStr == L'\0' ) ? NULL : wcscasestr(str + 1, sub);
}
int remove_substring(wchar_t * str, const wchar_t * sub) {
if ( str = wcscasestr(str, sub) ) {
wchar_t * ptr = str + wcslen(sub);
memmove(str, ptr, sizeof(wchar_t) * ( wcslen(ptr) + 1 ));
return 1 + remove_substring(str, sub);
}
else
return 0;
}
int main(void) {
wchar_t str[256], sub[256];
assert ( setlocale(LC_ALL, "ru_RU.UTF-8") );
while (
printf("Строка: ") > 0 &&
scanf("%255l[^\n]%*c", str) == 1 &&
printf("Подстрока: ") > 0 &&
scanf("%255l[^\n]%*c", sub) == 1
) {
int found = remove_substring(str, sub);
printf("Результат: %ls\nНайдено %d вхождений.\n", str, found);
}
return 0;
}
Объяснение кода листинга программы
- В функции
wcscasestrпроисходит поиск подстроки в строке. - Если подстрока найдена, то в функции
remove_substringпроисходит перемещение символов в строке, начиная с указателя на последний символ подстроки, для удаления этой подстроки. - Функция
remove_substringвызывает саму себя рекурсивно, чтобы найти все вхождения подстроки и удалить их. - В функции
mainпроисходит считывание строки и подстроки с помощьюscanf, а затем вызов функцииremove_substringи вывод результата на экран. - После выполнения всех операций программа возвращает 0, заканчивая свою работу.