Удалить из текста каждое 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 - в противном случае
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д