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 の回答は完全に正しく合理的ですが、(少なくとも) 考慮に値する別の可能性が 1 つあります。行っていることの種類によっては、イテレータを使用してストリームを参照する価値がある場合があります。この場合、実際の文字変換を処理するために作成するファンクターを使用して、translateおそらく になります。std::transformたとえば、1 つのファイル内のすべての文字を大文字に変換し、それらを別のファイルに書き込みたい場合は、次のようにすることができます。

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 に答える