我怎样才能做到这一点?
int number;
cin >> number;
我希望以 36 为基数输入数字(假设它们以 36 为基数输入)。在底数 36 中,A 表示 10,B 表示 11,C 表示 12,依此类推。C++ 怎么能理解'A' 不是一个字符,而是一个以 36 为底的数字,'cin >>' 会为此目的工作吗?
我怎样才能做到这一点?
int number;
cin >> number;
我希望以 36 为基数输入数字(假设它们以 36 为基数输入)。在底数 36 中,A 表示 10,B 表示 11,C 表示 12,依此类推。C++ 怎么能理解'A' 不是一个字符,而是一个以 36 为底的数字,'cin >>' 会为此目的工作吗?
您需要编写一个包含 , 的包装类,并为该类int&
重载,以便它在 base36 中解析。>>
用法如下所示:
int i;
cin >> base36(i);
// or if you do it more generically:
cin >> base(36, i);
标准 C++ 不为 8、10 和 16 以外的基数提供 I/O。
这有点 C 风格,但您可以输入一个纯字符串,然后使用strtol(l)
36 的基本参数将其转换为整数。
base-2 整数的有效数字集是 01,base-3 整数是 012,依此类推。对于大于 10 的基数,有效数字包括字母字符,从 Aa (基数为 11 整数)到Zz (基数为 36 整数)。字符的大小写被忽略。在非默认语言环境中,可以接受其他数字格式。
正如 Jesse Good 在评论中指出的那样,在 C++11 中,当无法执行转换时std::stol(l)
,也有调用但抛出异常的方法。std::strtol