Удалить из текста каждое 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 - в противном случае