不幸的是,通过适当的错误处理将负数的字符串表示形式解析为无符号整数似乎比人们预期的要复杂得多。都不是std::stoul , 也不是 strtoul, 也不是 boost::lexical_cast stringstream 方法也检测不到“错误”并通过执行回绕愉快地解析字符串“-1”。
有没有其他方法可以通过正确的错误处理将字符串转换为 unsigned int?作为对 boost bug report 的评论提出的方式似乎有点……奇怪。
最佳答案
据我所知,标准库中没有这样的函数/运算符。你可以:
预先检查字符串中的
-
字符,正如已经建议的那样,虽然很奇怪,但可以 AFAICTint mystrtoul(char const *s, unsigned &y) { if (strchr(s, '-') == NULL) { y = strtoul(s, NULL, 0); return 0; } return -1; }
首先使用
strtod()
。它会检测负数,然后如果数字不是负数,您可以调用strtoul()
,例如:int yastrtoul(char const *s, unsigned &y) { if (strtod(s, NULL) >= 0) { y = strtoul(s, NULL, 0); return 0; } return -1; }
自己完成所有事情,但要小心,因为检测溢出很棘手,因为存在未定义的行为。
关于c++ - 如果字符串表示负数,则使用错误处理将字符串解析为无符号整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35162937/