2016-07-01 1 views
1

ありません。私の質問は、これらの2行の周りでistringstream - なぜ次は私のコードの簡易版であるリセット機能

#include <iostream> 
#include <string> 
#include <sstream> 

int main() { 
    std::istringstream f; 

    f.clear(); 
    std::string s("line1"); 
    f.str(s); 
    std::string line;  
    while (std::getline(f, line)) { 
     std::cout << line << std::endl; 
    } 

    f.clear();  // must both clear() and str() 
    f.str(s); 
    while (std::getline(f, line)) { 
     std::cout << line << std::endl; 
    } 

    return 0; 
} 

f.str(s)を呼び出す

f.clear();  // must both clear() and str() 
f.str(s); 

はのために問題があります私が見つけたのは、clear()getline()の呼び出しで終了した後に何も読み取られないということです。

私はistringstreamインターフェイスを見て、リセットされた種類の機能は見ていませんが、何かが恋しくなる場合に備えて尋ねます。

str()は私のために動作しない理由 - 私のクラスには、入力としてはistream *を取り、それはファイルや文字列である可能性があり、実際の原稿を持っていません。

+3

これは、XYの問題のように聞こえます。あなたが実際に抱えている問題は何ですか? – NathanOliver

答えて

2

それはあなたが達成したい何であるか非常に明確ではないのですが、あなたは再び同じ流れを読みたい場合は、istringstreamistreamあり、そして通常の方法でseekg作品。

これを2回、 "LINE1" を出力します。

int main() { 
    std::istringstream f; 
    f.clear(); 
    std::string s("line1"); 
    f.str(s); 
    std::string line;  
    while (std::getline(f, line)) { 
     std::cout << line << std::endl; 
    } 
    f.clear(); 
    f.seekg(0); 
    while (std::getline(f, line)) { 
     std::cout << line << std::endl; 
    } 
} 
0

istringstreamをリセットするには、電話する必要があります。

f.str("") 

f.clear()のみエラーフラグではなく、実際のコンテンツ」をクリアすることです。

関連する問題