解析(浮点数)时使用什么信息? C++标准库在解析浮点数时使用什么信息?

解析(浮点数)时使用什么信息? C++标准库在解析浮点数时使用什么信息?,c++,c,locale,iostream,scanf,C++,C,Locale,Iostream,Scanf,以下是我知道的使用std c++解析单个浮点数的可能性: ,通过操作员>>或 直接通过 看起来很明显,至少,我们必须知道用什么字符作为十进制分隔符 尤其是iostreams,还谈到: ios_基本I/O格式标志-在解析浮点时,这里是否使用了任何信息? 千分位分隔符*见下文 另一方面,在std::strtod中,它似乎是sscanf的定义,num_get反过来引用了sscanf,唯一的变量信息似乎是what is和十进制字符,尽管它似乎没有在定义位置指定。至少不在cppref或MSDN上 < >,

以下是我知道的使用std c++解析单个浮点数的可能性:

,通过操作员>>或 直接通过 看起来很明显,至少,我们必须知道用什么字符作为十进制分隔符

尤其是iostreams,还谈到:

ios_基本I/O格式标志-在解析浮点时,这里是否使用了任何信息? 千分位分隔符*见下文 另一方面,在std::strtod中,它似乎是sscanf的定义,num_get反过来引用了sscanf,唯一的变量信息似乎是what is和十进制字符,尽管它似乎没有在定义位置指定。至少不在cppref或MSDN上

< >,实际使用什么信息,以及什么包括C++标准LIB?< /P>的有效可解析浮点表示法?

从我所看到的,只有十进制分隔符来自全局CORC++???是必需的,此外,如果数字包含千位分隔符,我希望它只能由num_get正确解析,因为strod/sscanf不支持千位分隔符

*这个团体对我来说是一个有趣的例子。据我所知,C函数不做任何引用,上次我检查C和C++标准的PrtTF函数将永远不会写入它。那么它真的是由strtd/scanf函数处理的吗?我知道有一个POSIX printf扩展用于组分隔符,但这不是真正的标准,而且微软的实现中明显缺少了它。

strtod的C11规范似乎有一个足够大的开口,可以让任何大小的卡车通过。它看起来是如此开放,我看不到任何限制

§7.22.1.3 6除C语言环境外,还可接受其他特定于语言环境的主题顺序表

对于非标准C语言环境,isspace、小数点、组分隔符、每组数字和符号似乎构成了典型的变体。但显然没有限制

为了好玩,我们使用printf、sscanf、strftime和isspace对500多个地区进行了实验

所有测试区域设置的小数点基数均为“.”或“,”,具有相同的+/-符号,没有数字分组,预期为0-9

strftime…%Y1000-99999年期间未使用数字分隔符

SSCANF1234.5%lf。。和sscanf1.234,5,%lf。。未在任何区域设置中生成1234.5

0到255范围内的所有int值都产生相同的isspace结果,但有时154和160除外

当然,这些测试并不能证明可能发生的情况是有限的,但确实代表了一种可能性。

STROD的C11规格似乎有一个足够大的开口,可以让任何尺寸的卡车通过。它看起来是如此开放,我看不到任何限制

§7.22.1.3 6除C语言环境外,还可接受其他特定于语言环境的主题顺序表

对于非标准C语言环境,isspace、小数点、组分隔符、每组数字和符号似乎构成了典型的变体。但显然没有限制

为了好玩,我们使用printf、sscanf、strftime和isspace对500多个地区进行了实验

所有测试区域设置的小数点基数均为“.”或“,”,具有相同的+/-符号,没有数字分组,预期为0-9

strftime…%Y1000-99999年期间未使用数字分隔符

SSCANF1234.5%lf。。和sscanf1.234,5,%lf。。未在任何区域设置中生成1234.5

0到255范围内的所有int值都产生相同的isspace结果,但有时154和160除外


当然,这些测试并不能证明对可能发生的情况有限制,但确实代表了一个可能性示例。

所有测试都应该使用当前区域设置来确定数千个分隔符和小数点字符。sscanf3和scanf3、fscanf3以及STROTD3都是C函数,用于向后兼容。它们作为C++的同系人应该尊重本地设置。@ von Brad——NuthGeGET的定义::获取甚至引用SCASNF。对我来说,它们是完全有效的标准C++函数。千-separator@MartinBa,它们是完全有效的,但是C遗留/兼容。也就是说,最好不要使用。它们都应该使用当前区域设置来确定数千个分隔符和小数点字符。sscanf3和scanf3、fscanf3以及STROTD3都是C函数,用于向后兼容。它们作为C++的同系人应该尊重本地设置。@ von Brad——NuthGeGET的定义::获取甚至引用SCASNF。对我来说,它们是完全有效的标准C++函数。千-separator@MartinBa,它们是完全有效的,但是C遗留/兼容。也就是说,最好不要用。也见也见