Замена определенных слов в файле - C (СИ)

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

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

Здравствуйте, уважаемые посетители данного форума. Перед собой я поставил интересную задачу и хотел бы ее реализовать, но пока этого не получается. Смыл задачи такой: Есть допустим файл file.txt мне нужно считать с него данные, но не просто считать а еще и обработать их, поясню, допустим в файле записано: -------------- begin Vasya Pupkin vyshel pogulyat end. -------------- И мне нужно, чтобы программа заменила и записала в новый файл (предварительно его создав, допустим file2.txt) такой текст: -------------- begin Vasya Pupkin ushel iz doma end. -------------- То, что не проходит фильтр записывается как и было в новый текстовом файл. В данный момент сделал чтение из файла, создание файла, запись в него и обработку только по 1-му символу, а нужно по словам, этого никак не могу сделать. Может мой код можно изменить, а не писать заново. Если это можно реализовать, пожалуйста с примерами кода или функциями.
int main()
{
  FILE *in;
  FILE *out;
  char c;
 
  in=fopen("file.txt","r");
  out=fopen("file2.txt","w");
 
  while ( (c=fgetc(in) ) != EOF)
  {
    if ( c == 'b' )
    c= 'A';
    fputc( c,out );
  }
  fclose(out);
  fclose(in);
  system("pause");
}

Решение задачи: «Замена определенных слов в файле»

textual
Листинг программы
#include <map>
#include <vector>
#include <string>
#include <fstream>
#include <iostream>
#include <iterator>
#include <algorithm>
 
typedef std::map<std::string, std::string> dictionary_t;
 
int main()
{
    std::vector<std::string> words;
 
    // инициализация словаря
    dictionary_t dict;
    
    // здесь надо вставить нормальную инициализацию
    // например, из файла
    dict["privet"]  = "hi";
    dict["poka"]    = "bye";
 
    // чтение входных данных
    std::copy(std::istream_iterator<std::string>(std::cin), 
              std::istream_iterator<std::string>(),
              std::back_inserter(words)
    );
 
    // замена 
    for(dictionary_t::iterator it = dict.begin(); it != dict.end(); ++it) {
        for(std::vector<std::string>::iterator j = words.begin(); j != words.end(); ++j)
            if(*j == it->first)
                *j = it->second;
    }
                  
 
    // вывод данных
    std::copy(words.begin(), words.end(), 
              std::ostream_iterator<std::string>(std::cout, " ")
    );
 
    return 0;
}

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

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