【发布时间】:2013-02-09 23:09:32
【问题描述】:
我知道这是一个重复的问题,我已经查看了很多答案,但到目前为止没有一个真正能够帮助我。
我需要能够将各种字符串传递给两个方法,一个返回一个双精度值,另一个返回一个整数值。 主要问题是我需要对这两种方法进行严格的错误检查,以便如果我传递一个不包含数字且仅包含数字的字符串,则该方法不会进行转换。正如我所说,我已经看到了一些解决方案,但我看到的唯一一个好的解决方案(能够遵循)是使用我不想使用的 Boost。至于我在这里无法遵循的答案是从
复制的一部分How to parse a string to an int in C++?
最佳解决方案
幸运的是,已经有人解决了上述所有问题。 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;
}
如果有人可以再解释一下,我认为这就是我正在寻找的答案,我只是无法充分了解它的作用,以便我可以将这个想法应用到我的代码中。
【问题讨论】:
-
您希望解释哪一部分?
-
C++11 有added some functions for this。
标签: c++ string int type-conversion