В файле F заменить на звездочку(*) слова в которых нету букв слова "word" - C (СИ)
Формулировка задачи:
В файле F заменить на звездочку(*) слова в которых нету букв слова "word"
В данным коде заменяется на звездочку каждый символ, а не слово. Как реализовать считывание по словам и замену слова на звездочку. Благодарю за помощь!!!
#include <stdio.h> #include <conio.h> void main(){ char word[8] = {'w','o','r','d','W','O','R','D'}; char temp; char z = '*'; char p = ' '; int k,j,i = 0; int check; FILE *f1 = fopen("file.txt","rt"); FILE *f2 = fopen("write.txt","wt"); if(f1 == NULL && f2 == NULL){ printf("fail!\n"); } char str; while((str=fgetc(f1)) != EOF){ if(str == '\0'){ fputc(p,f2); } while(str != '\0'){ temp[i] = str; i++ } for(k=0;k<=sizeof(temp); k++){ check =0; for(j=0;j<=sizeof(word); j++){ if(temp[k] == word[j]){ check = 1; } } } if(check == 0){ for(k=0;k<=sizeof(temp);k++){ fputc(temp[k],f2); } } else{ fputc(z,f2); } } getch(); }
Решение задачи: «В файле F заменить на звездочку(*) слова в которых нету букв слова "word"»
textual
Листинг программы
while ( fscanf(fin, "%255s", buf) == 1 ) fprintf(fout, "%s ", ( strpbrk(buf, "word") ) ? buf : "*");
Объяснение кода листинга программы
- В цикле while считывается строка из файла fin в буфер buf с помощью функции fscanf.
- Если длина строки в buf не превышает 255 символов, то она выводится в файл fout с добавлением пробела в конце с помощью функции fprintf.
- В строке buf проверяется наличие букв слова
word
с помощью функции strpbrk. - Если в строке есть буквы слова
word
, то она выводится в файл fout без изменений. - Если в строке нет букв слова
word
, то вместо нее выводится звездочка.