例如:如何在函數和輸出中使用通過ifstream輸入? C++
ifstream input;
input.open("file.txt");
translateStream(input, cout);
input.close();
如何寫功能translateStream? void translateStream(XXXX input, YYYY output)
? 輸入和輸出的類型是什麼?
由於
例如:如何在函數和輸出中使用通過ifstream輸入? C++
ifstream input;
input.open("file.txt");
translateStream(input, cout);
input.close();
如何寫功能translateStream? void translateStream(XXXX input, YYYY output)
? 輸入和輸出的類型是什麼?
由於
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";
}
}
雖然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;
}
這並不完全契合的問題完全一樣,你問道,但它無論如何可能是一個有價值的技術。
記得在讀完之後再做測試。轉換爲使while循環正常工作。 – 2009-12-29 01:54:40
哎呀,謝謝,壞習慣。您也添加了換行符:] – GManNickG 2009-12-29 02:38:20
請注意,流通過引用傳遞。它們也可以通過指針傳遞,但不能通過值。 – 2009-12-29 06:26:15