C++ で Stringstream をクリアする

Suraj P 2023年10月12日
  1. str("")clear() メソッドを使用して C++ で stringstream をクリアする
  2. C++ でスコーピングを使用して stringstream をクリアする
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 が得られますが、次の反復では、新しい値がストリームに追加されないため、文字列 temptemp2 の両方が空になります。 つまり、両方に空の文字列を割り当てるようなものです。

コード例 (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 変数のスコープを定義する必要があります。 範囲外になると、クリアされます。

著者: Suraj P
Suraj P avatar Suraj P avatar

A technophile and a Big Data developer by passion. Loves developing advance C++ and Java applications in free time works as SME at Chegg where I help students with there doubts and assignments in the field of Computer Science.

LinkedIn GitHub