例如:如何在函数和输出中使用通过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