Замена определенных слов в файле - 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; }