Подскажите как это лучше всего сделать с использованием только стандартных библиотек C++?
Если прям
true C++ way, то вам нужно использовать
std::fstream. Для него нужно реализовать стандартный
std::streambuf и во время записи в файл, когда буфер сбрасывается, у
std::streambuf
вызывается виртуальный метод
overflow(), вот его перегружаете, проходите по буферу, делаете нужные вам изменения и сбрасываете буфер дальше на запись. Примерно, как
тут.
Это если важна архитектура, гибкость, переиспользование кода и трушность C++.
А если более-менее простой вариант, то недо-true C++ way выглядит
примерно так#include <algorithm>
#include <fstream>
#include <iostream>
#include <iterator>
int main() {
std::ofstream out_file( "out.txt" );
std::ifstream in_file( "in.txt" );
std::string/*stream*/ some_buffer;
using char_type = decltype(out_file)::char_type;
using in_iter = std::istream_iterator< char_type >;
if ( !in_file.is_open() || !out_file.is_open() )
return EXIT_FAILURE;
std::transform(in_iter(in_file), in_iter(), std::ostream_iterator< char_type >(out_file),
[&some_buffer] (const char_type &c) {
if ( !std::isalpha( static_cast<unsigned char>(c) ) || c == '\n' || c == '\r' )
return ' ';
// if шило, then мыло, буферизуем если надо, и т. п.
return c;
});
return EXIT_SUCCESS;
}