_wtoi当无法转换输入,因此输入不是整数时,返回零。但同时输入可以为零。这是确定输入是否错误或为零的方法吗?
这是 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;
}
Run Code Online (Sandbox Code Playgroud)
boost 存在一个更干净、更简单的解决方案lexical_cast
:
#include <boost/lexcal_cast.hpp>
// ...
std::string s = "1234";
int i = boost::lexical_cast<int>(s);
Run Code Online (Sandbox Code Playgroud)
如果你坚持使用C,sscanf
可以干净地做到这一点。
const char *s = "1234";
int i = -1;
if(sscanf(s, "%d", &i) == EOF)
{
//error
}
Run Code Online (Sandbox Code Playgroud)
您也可以使用strtol
,但需要一点思考。是的,对于计算为零的字符串和错误,它都会返回零,但它还有一个(可选)参数endptr
,该参数将指向已转换的数字之后的下一个字符:
const char *s = "1234";
const char *endPtr;
int i = strtol(s, &endPtr, 10);
if (*endPtr != NULL) {
//error
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3046 次 |
最近记录: |