Vio*_*ffe 3 c++ string int type-conversion
我可以想到两种将字符串转换为int:strtol和 的方法std::stringstream。前者不报告错误(如果字符串不是数字的表示),后者抛出异常但它太放松了。一个例子:
std::wstring wstr("-123a45");
int result = 0;
try { ss >> result; }
catch (std::exception&)
{
// error handling
}
Run Code Online (Sandbox Code Playgroud)
我想在这里检测一个错误,因为整个字符串不能转换为 int,但没有抛出异常并且结果设置为 -123。如何使用标准 C++ 工具解决我的任务?
有std::stoi, 或std::strtol.
第一个抛出异常(在 C++11 及更高版本中),另一个您必须手动检查(因为它最初是标准 C 函数)。
您确实可以用来std::strtol检查字符串是否是有效数字:
char some_string[] = "...";
char *endptr;
long value = std::strtol(some_string, &endptr, 10);
if (endptr == some_string)
{
// Not a valid number at all
}
else if (*endptr != '\0')
{
// String begins with a valid number, but also contains something else after the number
}
else
{
// String is a number
}
Run Code Online (Sandbox Code Playgroud)
您错误地认为它strtol()不提供错误检查,但事实并非如此。第二个参数 tostrtol()可用于检测是否消耗了整个字符串。
char *endptr;
int result = strtol("-123a45", &endptr, 10);
if (*endptr != '\0') {
/*...input is not a decimal number */
}
Run Code Online (Sandbox Code Playgroud)