この記事では、主にC ++でのstringstreamクラスの一般的な使用法を紹介します。
1概要
<sstream>は3つのクラス、istringstream、ostringstream、stringstreamを定義します。これらはそれぞれ、ストリームの入力、出力、および入出力操作に使用されます。この記事ではstringstreamに焦点を当て、ストリームの入出力操作を紹介します。
<sstream>は主にデータ型変換に使用されます。<sstream>は文字配列(snprintfメソッド)の代わりに文字列オブジェクトを使用するため、バッファオーバーフローの危険を回避します。さらに、パラメータとターゲットオブジェクトタイプが自動的に導出されるためです。アウトなので、間違ったフォーマッタに問題はありません。簡単に言うと、Cライブラリのデータ型変換と比較して、<sstream>はより安全で、自動で、直接的なものです。
2コード例
2.1データ型変換
以下は、int型を文字列型に変換するプロセスを紹介するコード例です。サンプルコード(stringstream_test1.cpp)は次のとおりです。
1 #include < string > 2 #include <sstream> 3 #include <iostream> 4 #include <stdio.h> 5 6 名前空間std を使用 ; 7 8 int main() 9 { 10 stringstream sstream; 11 string strResult; 12 int nValue = 1000 ; 13 14 // タイプintの値を入力ストリームに入れます15 sstream << nValue; 16 // 先に挿入されたタイプintの値をsstreamから抽出し、それを文字列タイプ17に割り当てます sstream >> strResult; 18 19 cout << " [cout] strResult is:" << strResult << endl; 20 printf(" [printf] strResult is:%s \ n " 、strResult.c_str()); 21 22は 0を返し ます。 23 }
上記のコードをコンパイルして実行すると、結果は次のようになります。
2.2複数の文字列の連結
この例では、複数の文字列をstringstreamに格納して、複数の文字列を連結する目的を実現します(実際には、文字列クラスを使用して実現できます)と同時に、stringstreamのemptyメソッドを導入しています。
サンプルコード(stringstream_test2.cpp)は次のとおりです。
1 #include < 文字列 > 2 #include <sstream> 3 #include <iostream> 4 5 名前空間std を使用 。 6 7 int main() 8 { 9 stringstream sstream; 10 11 // sstreamに12 個の複数の文字文字列を放しますs12 sstream << " first " << " " << " string、" ; 13 sstream << " 2番目の文字列" ; " strResult is:" << sstream.str()<< endl; 15 16 // 清空sstream 17 sstream.str("" ); 18 sstream << " 3番目の文字列" ; 19 cout << " クリア後、strResultは次のようになります:" << sstream.str()<< endl; 20 21は 0を返し ます。 22 }
上記のコードをコンパイルして実行すると、結果は次のようになります。
上記のコード実行結果から、次のことがわかります。
- str()メソッドを使用して、文字列ストリーム型を文字列型に変換できます。
- 複数の文字列をstringstreamに入れて、文字列連結の目的を達成できます。
- 文字列ストリームをクリアする場合は、sstream.str( "");メソッドを使用する必要があります。clear()メソッドは、複数のデータ型変換が実行されるシナリオに適しています。詳細については、例2.3を参照してください。
2.3 stringstreamを空にする
文字列ストリームをクリアするには、clear()メソッドとstr( "")メソッドの2つの方法があります。これら2つの方法には、異なる使用シナリオがあります。上記の例では、str( "")メソッドの使用シナリオが紹介されています。ここでは、clear()メソッドの使用シナリオを示します。サンプルコード(stringstream_test3.cpp)は次のとおりです。
1 #include <sstream> 2 #include <iostream> 3 4 ネームスペースstd を使用 ; 5 6 int main() 7 { 8 stringstream sstream; 9 int first、second; 10 11 // Insert string 12 sstream << " 456 " ; 13 // int型に変換14 sstream >> first; 15 cout << first << endl; 16 17 // 複数の型変換を実行する前に、まずclear()18を実行する必要があります sstream.clear(); 19 20 // bool値を挿入 21 sstream << true ; 22 // int型に変換 23 sstream >> 秒; 24 cout <<秒<< endl; 25 26 return 0 ; 27 }
上記のコードをコンパイルして実行すると、結果は次のようになります。
注:この例に含まれるシナリオ(複数のデータ型変換)では、clear()メソッドまたはstr( "")メソッドを使用せずに、clear()メソッドを使用して文字列ストリームをクリアする必要があります。データ型変換の正しい結果を取得できません。 。次の図は、clear()メソッドが使用されておらず、str( "")メソッドが使用されている場合の実行結果を示しています。