我知道这是一个重复的问题,我已经查看了很多答案,但到目前为止没有一个真正能够帮助我。
我需要能够将各种字符串传递给两个方法,一个返回一个 double,另一个返回一个 int。主要问题是我需要对这两种方法进行严格的错误检查,以便如果我传递一个不包含数字且仅包含数字的字符串,则该方法不会进行转换。正如我所说,我已经看到了一些解决方案,但我看到的唯一一个好的解决方案(能够遵循)是使用我不想使用的 Boost。至于我在这里无法遵循的答案是其中一部分复制自
最佳解决方案
幸运的是,已经有人解决了上述所有问题。C 标准库包含strtol
没有这些问题的系列。
enum STR2INT_ERROR { SUCCESS, OVERFLOW, UNDERFLOW, INCONVERTIBLE };
STR2INT_ERROR str2int (int &i, char const *s, int base = 0)
{
char *end;
long l;
errno = 0;
l = strtol(s, &end, base);
if ((errno == ERANGE && l == LONG_MAX) || l > INT_MAX) {
return OVERFLOW;
}
if ((errno == ERANGE && l == LONG_MIN) || l < INT_MIN) {
return UNDERFLOW;
}
if (*s == '\0' || *end != '\0') {
return INCONVERTIBLE;
}
i = l;
return SUCCESS;
}
如果有人可以再解释一下,我认为这是我正在寻找的答案,我只是无法充分了解它的作用,以便我可以将这个想法应用于我的代码。