1

例如:

ifstream input;
input.open("file.txt");
translateStream(input, cout);
input.close();

如何编写函数 translateStream? void translateStream(XXXX input, YYYY output)? 输入输出的类型有哪些?

谢谢

4

2 回答 2

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";
    }
}
于 2009-12-29T01:33:46.817 回答
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;
}

这并不完全符合您提出的问题,但无论如何它可能是一种有价值的技术。

于 2009-12-29T08:16:59.060 回答