Удалить из текста каждое N-е вхождение в него заданного слова - C (СИ)

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

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

Здравствуйте, мне нужно сделать программу, которая бы удаляла из текста каждое N-е вхождение в него заданного слова. У меня есть код, который удаляет каждое N-е вхождение в него заданного символа.
Листинг программы
  1. #include <stdio.h>
  2. #include <conio.h>
  3. void main(void)
  4. {
  5. char inputName[20];
  6. char outputName[20];
  7. FILE *in, *out;
  8. int N, currN;
  9. char c, cIn;
  10. clrscr();
  11. printf("file names?\n");
  12. printf("Input file name (<20 chars): ");
  13. scanf("%20s", inputName);
  14. printf("Output file name (<20 chars): ");
  15. scanf("%20s", outputName);
  16. printf("Enter parameters.\n");
  17. printf("Enter N: ");
  18. scanf("%d", &N);
  19. printf("Enter Char: ");
  20. c = getche();
  21. printf("\nOpen input file\n");
  22. if ( (in = fopen(inputName, "rt")) == NULL)
  23. {
  24. fprintf(stderr, "Cannot open input file.\n");
  25. return 1;
  26. }
  27. printf("Create output file\n");
  28. if ( (out = fopen(outputName, "wt")) == NULL)
  29. {
  30. fprintf(stderr, "Cannot open output file.\n");
  31. return 1;
  32. }
  33. printf("Deleting character\n");
  34.  
  35. currN = 0;
  36. do
  37. {
  38. cIn = fgetc(in);
  39. printf("%c -> ",cIn);
  40. if(cIn != c )
  41. {
  42. printf("not match -> %c\n", cIn);
  43. fputc(cIn,out);
  44. continue;
  45. }
  46. else
  47. {
  48. currN++;
  49. if( currN == N )
  50. {
  51. printf("matches %d times -> deleted\n", currN);
  52. currN=0;
  53. }
  54. else
  55. {
  56. printf("matches %d times -> %c\n", currN,c);
  57. fputc(c,out);
  58. }
  59. }
  60. } while (!feof(in));
  61. printf("Closing files\n");
  62. fclose(in);
  63. fclose(out);
  64. while (!kbhit());
  65. }
Как мне его переделать под заданное слово???
Добавлено через 1 час 47 минут 19 секунд
ПОМОГИТЕ!!!!!!!!!!!!!!!1

Решение задачи: «Удалить из текста каждое N-е вхождение в него заданного слова»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <string.h>
  3. #define MAXLINE 1000
  4. #define N 10
  5.  
  6. main()
  7. {
  8.     FILE *ifp, *ofp;  
  9.     int wlen, cnt = 0;
  10.     char word[80], line[MAXLINE], *p, *qtmp;
  11.    
  12.     ifp = fopen("data.txt", "r");
  13.     if(ifp == NULL || (ofp = fopen("result.txt", "w")) == NULL)
  14.        return 1;
  15.    
  16.     printf("Enter word: ");
  17.     scanf("%s", word);      /* слово для убиения */
  18.     wlen = strlen(word);    /* длина искомого слова */
  19.    
  20.     while(fgets(line, MAXLINE, ifp) != NULL) {
  21.        qtmp = line;
  22.        while((p = strstr(qtmp, word)) != NULL) {
  23.           cnt++;
  24.           if(cnt == N) {
  25.              cnt = 0;
  26.              strcpy(p, p+wlen);    /* затираем слово */
  27.           }
  28.           qtmp = p + wlen;
  29.        }
  30.        fputs(line, ofp);
  31.     }
  32.     fclose(ifp);
  33.     fclose(ofp);
  34.     return 0;
  35. }

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

В этом коде:

  1. Включаются необходимые заголовочные файлы
  2. Определяются константы: MAXLINE - максимальное количество символов в одной строке, N - количество вхождений слова, которое нужно удалить
  3. Подключается стандартный ввод/вывод
  4. Открываются файлы для чтения и записи
  5. Пользователю предлагается ввести слово, которое нужно удалить
  6. Считывается введенное слово и определяется его длина
  7. В цикле, пока не достигнут конец файла, происходит чтение строки из файла
  8. В этой строке ищутся вхождения искомого слова
  9. Если слово найдено, его заменяют на пустую строку (удаляют)
  10. После обработки строки, она записывается в выходной файл
  11. В конце программы закрываются файлы
  12. Возвращается 0, если все прошло успешно, 1 - в противном случае

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


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

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

12   голосов , оценка 3.583 из 5

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

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

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