2009-12-29 2 views

ответ

8

std::istream и std::ostream соответственно:

void translateStream(std::istream& pIn, std::ostream& pOut); 

Пример:

void translateStream(std::istream& pIn, std::ostream& pOut) 
{ 
    // line for line "translation" 
    std::string s; 
    while (std::getline(pIn, s)) 
    { 
     pOut << s << "\n"; 
    } 
} 
+0

Не забудьте выполнить тест после считывания. Преобразован, чтобы сделать цикл while корректным. –

+0

К сожалению, спасибо, плохая привычка. Вы также добавили новую строку:] – GManNickG

+0

Обратите внимание, что потоки передаются по ссылке. Они также могут передаваться указателем, но не по значению. –

1

Хотя ответ GMan является совершенно правильным и разумным, есть (по крайней мере) одна возможность вот и стоит учесть. В зависимости от того, что вы делаете, может быть полезно использовать итераторы для обращения к потокам. В этом случае ваш translate, вероятно, будет std::transform, с функтором, который вы пишете для обработки фактического перевода. Например, если вы хотите, чтобы перевести все буквы в одном файле в верхнем регистре, и записать их в другой файл, вы могли бы сделать что-то вроде:

struct tr { 
    char operator()(char input) { return toupper((unsigned char)input); } 
}; 

int main() { 
    std::ifstream input("file.txt"); 
    input.skipws(false); 
    std::transform(std::ifstream_iterator<char>(input), 
     std::ifstream_iterator<char>(), 
     std::ostream_iterator<char>(std::cout, ""), 
     tr()); 
    return 0; 
} 

Это не совсем подходит с вопросом именно так, как вам - спросил он, но в любом случае это может быть полезная техника.

Смежные вопросы