Удалить из строки указанные слова вместе с предшествующими разделителями - C (СИ)
Формулировка задачи:
Удаление слов
Напишите программу, которая удаляет из строки указанные слова вместе с предшествующими разделителями. Словами будем считать непрерывные последовательности букв (непустые), все остальные символы будут разделителями слов. Регистр букв имеет значение.
_________________________________________________________________________
На входе
В первой строчке записано слово, которое требуется удалить. Далее идёт строка (возможно, пустая), состоящая из латинских букв, цифр, знаков препинания и других печатных символов таблицы ASCII. Размер строки не более 100 печатных символов._________________________________________________________________________
На выходе
Строка, в которой удалены все совпадающие с заданным слова вместе с предшествующей группой разделителей, остальной текст при этом оставлен без изменений._________________________________________________________________________
Пример#1
На входе
main Main word remains main.На выходе
Main word remains.Пример#2
На входе
b a += b * c - bНа выходе
a * cРешение задачи: «Удалить из строки указанные слова вместе с предшествующими разделителями»
textual
Листинг программы
#include <stdio.h> #include <string.h> #include <ctype.h> //удаление слова char* remove_word(char* s, const char* w){ const char* b; char* a, *p, *t = s; if((s = strstr(s, w)) == NULL) return t; for(p = s; *s; *s = *p){ if((*p == *w) && (p == t || ! isalpha(*(p - 1)))){ a = p; b = w; while(*a && (*a == *b)){ ++a; ++b; } if(!*b && !isalpha(*a)){ --s; while((s >= t) && !isalpha(*s)) --s; ++s; p = a; } else { while(p != a) *s++ = *p++; } continue; } ++s; ++p; } return t; } int main(void){ char s1[] = "Main word remains main."; char s2[] = "a += b * c - b"; puts(s1); puts( remove_word(s1, "main") ); putchar('\n'); puts(s2); puts( remove_word(s2, "b") ); return 0; }
Объяснение кода листинга программы
- Удаляет указанное слово из строки вместе с предшествующими разделителями.
- Если указанное слово не найдено в строке, возвращает исходную строку.
- Ищет первое вхождение указанного слова в строке.
- Если найденное слово является последним в строке и перед ним нет буквы, удаляет его.
- Если найденное слово не является последним в строке, проходит по всем символам между найденным словом и концом строки, проверяя, является ли текущий символ буквой.
- Если текущий символ является буквой и он следует за найденным словом, удаляет найденное слово и все символы перед ним.
- Если текущий символ не является буквой, пропускает его и переходит к следующему символу.
- Возвращает измененную строку.
- Выводит исходную строку.
- Выводит измененную строку.
- Выводит исходную строку.
- Выводит измененную строку.
- Возвращает 0.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д