Ввести строку и слово, удалить все вхождения слова и вывести строку - C (СИ) (72271)

Узнай цену своей работы

Формулировка задачи:

Нужно написать программу только со стандартной библиотекой <stdio.h> Помогите, пожалуйста :3

Решение задачи: «Ввести строку и слово, удалить все вхождения слова и вывести строку»

textual
Листинг программы
#include <stdio.h>
 
//-----------------------------------------------------------------------------
int isAlnum(int ch) {
    return ((('a' <= ch) && (ch <= 'z'))
            || (('A' <= ch) && (ch <= 'Z'))
            || (('0' <= ch) && (ch <= '9')));
}
//-----------------------------------------------------------------------------
int getWord(char* str, char** begin, char** end) {
    for (; *str && !isAlnum(*str); ++str) { ; }
    *begin = str;
 
    for (; *str && isAlnum(*str); ++str) { ; }
    *end = str;
 
    return (*end - *begin);
}
//-----------------------------------------------------------------------------
void strSet(char* str, char ch, unsigned size) {
    while (size--) {
        *str++ = ch;
    }
}
//-----------------------------------------------------------------------------
int strCmp(const char* str1, const char* str2, int size) {
    while (size && *str1 && *str2 && (*str1++ == *str2++)) {
        size--;
    }
    return (size == 0);
}
//-----------------------------------------------------------------------------
int strLen(const char* str) {
    const char* p;
    for (p = str; *p; ++p) { ; }
    return (p - str);
}
//-----------------------------------------------------------------------------
char* strChrRemove(char str[], char ch) {
    int offs = 0;
    char* p;
    for (p = str; *p; ++p) {
        if (*p == ch) {
            offs++;
        }
        else {
            *(p - offs) = *p;
        }
    }
    *(p - offs) = 0;
    return str;
}
//-----------------------------------------------------------------------------
char* wordRemove(char text[], const char word[]) {
    const char REPLACED_CHAR = 1;
    char* str = text, * begin, * end;
    int len, lenWord = strLen(word);
 
    while ((len = getWord(str, &begin, &end))) {
        if ((len == lenWord) && strCmp(begin, word, len)) {
            strSet(begin, REPLACED_CHAR, len);
        }
        str = end;
    }
 
    return strChrRemove(text, REPLACED_CHAR);
}
//-----------------------------------------------------------------------------
 
int main() {
    char text[] = "this is program delete word 'program'.";
    char word[] = "program";
 
    printf("%s\n", wordRemove(text, word));
 
    return 0;
}

Объяснение кода листинга программы

  1. Предоставлен код на языке C, который удаляет все вхождения указанного слова из строки.
  2. Код использует несколько вспомогательных функций:
    • isAlnum проверяет, является ли символ буквой или цифрой.
    • getWord получает подстроку между двумя указанными символами (первым и последним символами слова).
    • strSet заполняет указанную строку определенным символом.
    • strCmp сравнивает две строки, игнорируя указанное количество символов с начала.
    • strLen возвращает длину строки.
    • strChrRemove удаляет указанный символ из строки, заменяя его на символ заполнения.
  3. В функции main создается тестовая строка this is program delete word 'program'. и слово program.
  4. Вызывается функция wordRemove, передавая тестовую строку и слово в качестве аргументов.
  5. Результат выводится на консоль.
  6. Возвращаемое значение функции wordRemove - это измененная версия исходной строки, в которой все вхождения указанного слова заменены на символ заполнения .
  7. В данном случае, вывод на консоль будет: this is delete word 'program'..

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.571 из 5
Похожие ответы