如何在函数和输出中使用pass ifstream输入? C ++

时间:2009-12-29 01:31:07

标签: c++ iostream

例如:

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

如何编写translateStream函数? void translateStream(XXXX input, YYYY output)? 输入和输出的类型是什么?

由于

2 个答案:

答案 0 :(得分: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";
    }
}

答案 1 :(得分: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;
}

这与你提出的问题完全不符合问题,但无论如何它都是值得的技术。