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

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

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

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

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

textual
Листинг программы
  1. #include <stdio.h>
  2.  
  3. //-----------------------------------------------------------------------------
  4. int isAlnum(int ch) {
  5.     return ((('a' <= ch) && (ch <= 'z'))
  6.             || (('A' <= ch) && (ch <= 'Z'))
  7.             || (('0' <= ch) && (ch <= '9')));
  8. }
  9. //-----------------------------------------------------------------------------
  10. int getWord(char* str, char** begin, char** end) {
  11.     for (; *str && !isAlnum(*str); ++str) { ; }
  12.     *begin = str;
  13.  
  14.     for (; *str && isAlnum(*str); ++str) { ; }
  15.     *end = str;
  16.  
  17.     return (*end - *begin);
  18. }
  19. //-----------------------------------------------------------------------------
  20. void strSet(char* str, char ch, unsigned size) {
  21.     while (size--) {
  22.         *str++ = ch;
  23.     }
  24. }
  25. //-----------------------------------------------------------------------------
  26. int strCmp(const char* str1, const char* str2, int size) {
  27.     while (size && *str1 && *str2 && (*str1++ == *str2++)) {
  28.         size--;
  29.     }
  30.     return (size == 0);
  31. }
  32. //-----------------------------------------------------------------------------
  33. int strLen(const char* str) {
  34.     const char* p;
  35.     for (p = str; *p; ++p) { ; }
  36.     return (p - str);
  37. }
  38. //-----------------------------------------------------------------------------
  39. char* strChrRemove(char str[], char ch) {
  40.     int offs = 0;
  41.     char* p;
  42.     for (p = str; *p; ++p) {
  43.         if (*p == ch) {
  44.             offs++;
  45.         }
  46.         else {
  47.             *(p - offs) = *p;
  48.         }
  49.     }
  50.     *(p - offs) = 0;
  51.     return str;
  52. }
  53. //-----------------------------------------------------------------------------
  54. char* wordRemove(char text[], const char word[]) {
  55.     const char REPLACED_CHAR = 1;
  56.     char* str = text, * begin, * end;
  57.     int len, lenWord = strLen(word);
  58.  
  59.     while ((len = getWord(str, &begin, &end))) {
  60.         if ((len == lenWord) && strCmp(begin, word, len)) {
  61.             strSet(begin, REPLACED_CHAR, len);
  62.         }
  63.         str = end;
  64.     }
  65.  
  66.     return strChrRemove(text, REPLACED_CHAR);
  67. }
  68. //-----------------------------------------------------------------------------
  69.  
  70. int main() {
  71.     char text[] = "this is program delete word 'program'.";
  72.     char word[] = "program";
  73.  
  74.     printf("%s\n", wordRemove(text, word));
  75.  
  76.     return 0;
  77. }

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

  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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы