Удалить из текста каждое 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; }
Объяснение кода листинга программы
В этом коде:
- Включаются необходимые заголовочные файлы
- Определяются константы: MAXLINE - максимальное количество символов в одной строке, N - количество вхождений слова, которое нужно удалить
- Подключается стандартный ввод/вывод
- Открываются файлы для чтения и записи
- Пользователю предлагается ввести слово, которое нужно удалить
- Считывается введенное слово и определяется его длина
- В цикле, пока не достигнут конец файла, происходит чтение строки из файла
- В этой строке ищутся вхождения искомого слова
- Если слово найдено, его заменяют на пустую строку (удаляют)
- После обработки строки, она записывается в выходной файл
- В конце программы закрываются файлы
- Возвращается 0, если все прошло успешно, 1 - в противном случае
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д