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

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

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

Здравствуйте, мне нужно сделать программу, которая бы удаляла из текста каждое N-е вхождение в него заданного слова. У меня есть код, который удаляет каждое N-е вхождение в него заданного символа.
#include <stdio.h>
#include <conio.h>
 
void main(void)
{
    char inputName[20];
    char outputName[20];
 
    FILE *in, *out;
 
    int N, currN;
    char c, cIn;
 
    clrscr();
    printf("file names?\n");
 
    printf("Input file name (<20 chars): ");
    scanf("%20s", inputName);
 
    printf("Output file name (<20 chars): ");
    scanf("%20s", outputName);
 
    printf("Enter parameters.\n");
 
    printf("Enter N: ");
    scanf("%d", &N);
 
    printf("Enter Char: ");
    c = getche();
 
    printf("\nOpen input file\n");
    if ( (in = fopen(inputName, "rt"))  == NULL)
    {
       fprintf(stderr, "Cannot open input file.\n");
       return 1;
    }
 
    printf("Create output file\n");
    if ( (out = fopen(outputName, "wt"))  == NULL)
    {
       fprintf(stderr, "Cannot open output file.\n");
       return 1;
    }
 
    printf("Deleting character\n");

    currN = 0;
    do
    {
        cIn = fgetc(in);
        printf("%c  ->   ",cIn);
        if(cIn != c )
        {
            printf("not match   ->   %c\n", cIn);
            fputc(cIn,out);
            continue;
        }
        else
        {
            currN++;
            if( currN == N )
            {
                printf("matches %d times   ->   deleted\n", currN);
                currN=0;
            }
            else
            {
                printf("matches %d times   ->   %c\n", currN,c);
                fputc(c,out);
            }
        }
 
    } while (!feof(in));
 
    printf("Closing files\n");
    fclose(in);
    fclose(out);
    while (!kbhit());
}
Как мне его переделать под заданное слово???
Добавлено через 1 час 47 минут 19 секунд
ПОМОГИТЕ!!!!!!!!!!!!!!!1

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

textual
Листинг программы
#include <stdio.h>
#include <string.h>
#define MAXLINE 1000
#define N 10
 
main()
{ 
    FILE *ifp, *ofp;   
    int wlen, cnt = 0;
    char word[80], line[MAXLINE], *p, *qtmp;
    
    ifp = fopen("data.txt", "r");
    if(ifp == NULL || (ofp = fopen("result.txt", "w")) == NULL)
       return 1;
    
    printf("Enter word: ");
    scanf("%s", word);      /* слово для убиения */
    wlen = strlen(word);    /* длина искомого слова */
    
    while(fgets(line, MAXLINE, ifp) != NULL) {
       qtmp = line;
       while((p = strstr(qtmp, word)) != NULL) {
          cnt++;
          if(cnt == N) {
             cnt = 0;
             strcpy(p, p+wlen);    /* затираем слово */
          }
          qtmp = p + wlen;
       }
       fputs(line, ofp);
    }
    fclose(ifp);
    fclose(ofp);
    return 0;
}

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

В этом коде:

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

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


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

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

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