2

私の知る限り、文字列をintにキャストするC ++の一般的な方法は、sstreamを使用することです。

   std::string inputString = "12 34";
   std::istringstream istr(inputString);
   int i1, i2;
   istr >> i1 >> i2;

しかし、私のコードがどの入力でも機能することを確認したい場合、問題は文字列の入力か0のどちらかを決定することです。

   std::string inputString = "TEXT 0";
   std::istringstream istr(inputString);
   int i1, i2;
   istr >> i1 >> i2;
   cout << i1 <<"  !=  "<< i2 << endl;

さらに操作を行うために、ユーザーが文字列を入力したのかゼロを入力したのかを判断したいと思います。字句キャストやatoiを使用せずに、この問題を判断するためのクリーンな方法はありますか?最高のゲガード

4

1 に答える 1

1

無効なデフォルト値を使用できます。

#include<sstream>
#include<limits>
using std::numeric_limits;
int main(){
    std::string inputString = "TEXT 0"; 
    std::istringstream istr(inputString);
    int i1=numeric_limits<int>::min();
    int i2=numeric_limits<int>::min(); 
    std::string tmp;
    istr >> i1;
    if (i1 == numeric_limits<int>::min()) {
      // extraction failed
      i1 = 0;
      istr.clear(); // clear error flags to allow further extraction
      istr >> tmp; // consume the troublesome token
    }
    // same for i2
}

:この手法は、有効な入力にnumeric_limits<int>::min() できない場合に機能します

于 2012-05-18T17:46:38.617 に答える