4

_wtoiは、入力を変換できないため、入力が整数でない場合、0 を返します。ただし、同時に入力がゼロになることもあります。間違った入力またはゼロがあったかどうかを判断する方法はありますか?

4

1 に答える 1

4

これは C++stringstreamです。変換を行うために使用する必要があります。

#include <iostream>
#include <sstream>

int main()
{
   using namespace std;

   string s = "1234";
   stringstream ss;

   ss << s;

   int i;
   ss >> i;

   if (ss.fail( )) 
   {
        throw someWeirdException;
   }
   cout << i << endl;

   return 0;
}

ブーストの を使用すると、よりクリーンで簡単なソリューションが存在しlexical_castます。

#include <boost/lexcal_cast.hpp>

// ...
std::string s = "1234";
int i = boost::lexical_cast<int>(s);

C の使用を主張する場合は、sscanfこれをきれいに行うことができます。

const char *s = "1234";
int i = -1;

if(sscanf(s, "%d", &i) == EOF)
{
    //error
}

strtol少し考える必要があるという注意を払って使用することもできます。はい、ゼロと評価された文字列とエラーの両方に対してゼロを返しますが、endptr変換された数値の後の次の文字を指す (オプションの) パラメーターもあります。

const char *s = "1234";
const char *endPtr;
int i = strtol(s, &endPtr, 10);

if (*endPtr != NULL) {
    //error
}
于 2012-05-21T16:54:52.530 に答える