1

重複の可能性:
stringstreamをクリアする方法は?

私はこのc++コマンドを持っています

//siteurl and filename are of string type


stringstream ss;
ss << "lynx -dump '" << siteurl << "' > " << filename;

最初のループでは、すべて問題ありません。しかし、2番目のループでは、新しいレコードを作成するのではなく、追加するだけであることに気付きました。

coutを使用してトラブルシューティングを行うと、コマンドが2番目のループで上書きする代わりに追加であることがわかります。2番目のループ/使用法でss(stringstream)の最初のレコードをnullまたはリセットまたは上書きするにはどうすればよいですか。

Webparser: lynx -dump 'http://sg.finance.yahoo.com/q?s=USDSGD=X' > file.txtlynx -dump 'http://sg.finance.yahoo.com/q?s=EURUSD=X' > file.txt

私が欲しいのは2番目のループにありますそれはこの出力になります

Webparser: lynx -dump 'http://sg.finance.yahoo.com/q?s=EURUSD=X' > file.txt

私はC++を初めて使用します。すべての助けに感謝し、大いに感謝します。

4

1 に答える 1

3

ss.str("")空にするために行ってください。

ただしss、ループ内で定義して、毎回新しい変数になるようにすることをお勧めします。

for(/*.....*/)
{
   stringstream ss;
   ss << /*....*/ ;
}

つまり、スコープ変数(function-scopeやblock-scopeなど)にして、スコープ外になると破棄され、戻ったときに再び作成されるようにします。

スコープ変数ss.str("")にすることは、空にするために使用するよりもエラーが発生しにくくなります。つまり、あなたがするのを忘れたらどうしますss.str("")か?多くの場合、書き込む必要がある場合は、実際にss.str("")スコープ変数にする必要があることを示します。これにより、ループ内(上記のように)またはまったく新しい変数(おそらく別の名前)で再度定義できます。 。

于 2012-07-29T13:50:27.950 に答える