2009-12-29 56 views

回答

8

分别std::istreamstd::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循环正常工作。 – 2009-12-29 01:54:40

+0

哎呀,谢谢,坏习惯。您也添加了换行符:] – GManNickG 2009-12-29 02:38:20

+0

请注意,流通过引用传递。它们也可以通过指针传递,但不能通过值。 – 2009-12-29 06:26:15

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; 
} 

这并不完全契合的问题完全一样,你问道,但它无论如何可能是一个有价值的技术。

相关问题