C++,将输入字符串转换为数字,转换失败不应返回零
c++, converting input string to number, failure to convert should not return zero
嗨,我在看 c++ strtol
、strtoll
、strtoul
、atol
等中的字符串转换方法。似乎它们中的每一个都会返回一个0
(或0.0
)作为无法转换的字符串的结果。假设0
是我的程序完全有效的正确输入,我如何避免将无意义的字符串转换为零并使它们抛出一些异常?是否有现成的函数可以这样执行,或者我是否必须用我自己的一些代码包装这些函数。还有谁能解释一下这些函数是这样设计的可能原因是什么(为什么要麻烦地将无意义的字符串解析结果与上帝的"0"字符串解析结果分开)?
失败是通过设置 errno
来表示的,这是老式的 C 做事方式。
您可能会发现stol
和朋友更有用 - 它们通过引发异常来指示失败。
http://en.cppreference.com/w/cpp/string/basic_string/stol
您可以使用
std::stoi()
std::stof()
函数系列来执行此操作。这些函数将引发无效输入异常。
您可能会发现有用的提升/lexical_cast。
相关文章:
- 返回时不允许隐式转换
- 基于返回类型的转换和过载扣除
- 将传入的网络"char*"数据转换为"uint8_t"并返回的安全方法是什么?
- 将内存分配返回值强制转换为 TYPE 数组
- 当我使用 void 函数的返回值(通过强制转换函数指针)时,究竟会发生什么?
- 用户定义的转换无法指定返回类型
- 使用 jni 将返回带有模板的对象的 Java 代码转换为 c++
- 如何为具有常量类型的函数正确转换来自 DLsym 的返回值?
- 创建一个函数来转换数组元素的类型并返回数组的地址
- 类型转换问题:返回为整数而不是浮点/类型
- 返回对常量结构(指针类型)成员的引用:明显的左值到右值转换
- 如何定义依赖于参数包转换的函数的返回类型
- 将unique_ptr转换为void*并返回,我需要释放吗
- 函数返回动态强制转换的指针,返回指针,就好像它根本没有被转换一样
- 动态强制转换返回空值
- tf2_ros::Buffer::canTransform() 为现有转换返回 False
- QImage转换返回null
- Atoi转换返回一个个位数值
- 静态强制转换返回类型
- 通过隐式转换返回时所需的复制构造函数