_wtoiは、入力を変換できないため、入力が整数でない場合、0 を返します。ただし、同時に入力がゼロになることもあります。間違った入力またはゼロがあったかどうかを判断する方法はありますか?
質問する
2815 次
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 に答える