Удалить заданную подстроку из исходной строки - 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, заканчивая свою работу.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д