gpt4 book ai didi

c++ - `std::istream::operator>>()` 可以接受像 stdio 的 %i 格式说明符这样的整数基数前缀吗?

转载 作者:可可西里 更新时间:2023-11-01 15:59:30 26 4
gpt4 key购买 nike

当使用 scanf() 及其变体时,格式说明符 %i 将接受十六进制(前缀为“0x”)、八进制(前缀为“0”)或十进制(无前缀)的数据,例如字符串“0x10”、“020”和“16”都被转换为十进制值为 16 的整数。

这可以用 std::istream::operator>> 格式的输入来完成吗?

使用没有 i/o 操纵器的普通 >> i 将“0x10”转换为零(或者更确切地说,前导 0 是,不处理“x10”部分),并且“020”到 20。hexoctdec 操纵符的行为类似于 %x%o%d 分别。我正在寻找像 %i 一样工作的通用整数输入操纵器。

有趣的是,hex 操纵器可能同时接受“0x10”和“10”,将它们转换为 16 进制。

如果您可能想知道,我正在实现一个表达式计算器,并且我希望使用 C/C++ 前缀约定允许整数操作数为十六进制、八进制或十进制。当前使用 sscanf() 的实现使用 %i 自动执行此操作,我很好奇是否可以将其修改为使用 iostream 而无需显式解析数字格式.

最佳答案

basic_istream 格式标志中的基本字段指示如何解释数字。该字段可以设置为 decocthex。默认设置为 dec。如果它没有设置为它们,basic_istream 将表现得像 scanf%i 标志:

// automatically detect the base, depending on prefix
std::cin.unsetf(std::ios_base::basefield);

关于c++ - `std::istream::operator>>()` 可以接受像 stdio 的 %i 格式说明符这样的整数基数前缀吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4476804/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com