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