2009-12-29 17 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; 
} 

這並不完全契合的問題完全一樣,你問道,但它無論如何可能是一個有價值的技術。

相關問題