C++ で Stringstream をクリアする
この記事では、C++ で stringstreams
をクリアまたは空にするさまざまな方法を説明します。
str("")
と clear()
メソッドを使用して C++ で stringstream
をクリアする
stringstream
をクリアまたは空にするには、str("")
と clear()
メソッドを使用できますが、両方のメソッドを使用する必要があります。 そうしないと、プログラムが正しく動作しない可能性があります。つまり、正しい出力が得られません。
コード例 (str("")
のみを使用):
#include <bits/stdc++.h>
using namespace std;
int main() {
string temp;
string temp2;
stringstream ss;
for (int i = 0; i < 5; i++)
{
ss.str("");
ss << i;
temp = ss.str();
ss >> temp2;
cout << temp << " " << ss.str() << " " << temp2 << endl;
}
}
出力:
0 0 0
0
0
0
0
ss.str("")
を使用すると文字列がクリアされるため、上記の出力は正しくありませんが、問題はストリームに新しい値を追加できないことです。
そのため、最初の行では正しい出力 0 0 0
が得られますが、次の反復では、新しい値がストリームに追加されないため、文字列 temp
と temp2
の両方が空になります。 つまり、両方に空の文字列を割り当てるようなものです。
コード例 (str("")
と clear()
を一緒に使用):
clear()
関数は、ストリームのエラー状態をリセットします。 ストリームにエラーが発生すると、エラー状態は eofbit (ファイルの終わり) に設定され、clear() を使用することで、エラーがないと言って goodbit に戻すことができます。
#include <bits/stdc++.h>
using namespace std;
int main() {
string temp;
string temp2;
stringstream ss;
for (int i = 0; i < 5; i++)
{
ss.clear();
ss.str("");
ss << i;
temp = ss.str();
ss >> temp2;
cout << temp << " " << ss.str() << " " << temp2 << endl;
}
}
出力:
0 0 0
1 1 1
2 2 2
3 3 3
4 4 4
説明: ここでは、clear()
を str("")
とともに使用すると、ストリームをクリアした後に新しい値をストリームに追加できるため、正しい出力が得られます。
C++ でスコーピングを使用して stringstream
をクリアする
最初の方法ほど効果的ではありませんが、これは stringstream
をクリアするための回避策です。 スコープの概念を使用できます。
コード例:
#include <bits/stdc++.h>
using namespace std;
int main() {
{
stringstream ss;
ss << "our code part ";
cout << ss.str() << endl;
}
{
stringstream ss;
ss << "Tony ";
cout << ss.str() << endl;
}
{
stringstream ss;
ss << "stark ";
cout << ss.str() << endl;
}
}
出力:
our code part
Tony
stark
説明: ここでは、波括弧 { }
を使用して、その stringstream
変数のスコープを定義する必要があります。 範囲外になると、クリアされます。