2

我怎样才能做到这一点?

int number;
cin >> number;

我希望以 36 为基数输入数字(假设它们以 36 为基数输入)。在底数 36 中,A 表示 10,B 表示 11,C 表示 12,依此类推。C++ 怎么能理解'A' 不是一个字符,而是一个以 36 为底的数字,'cin >>' 会为此目的工作吗?

4

2 回答 2

6

您需要编写一个包含 , 的包装类,并为该类int&重载,以便它在 base36 中解析。>>用法如下所示:

int i;
cin >> base36(i);
// or if you do it more generically:
cin >> base(36, i);

标准 C++ 不为 8、10 和 16 以外的基数提供 I/O。

于 2013-09-25T11:31:19.953 回答
5

这有点 C 风格,但您可以输入一个纯字符串,然后使用strtol(l)36 的基本参数将其转换为整数。

base-2 整数的有效数字集是 01,base-3 整数是 012,依此类推。对于大于 10 的基数,有效数字包括字母字符,从 Aa (基数为 11 整数)到Zz (基数为 36 整数)。字符的大小写被忽略。在非默认语言环境中,可以接受其他数字格式。

正如 Jesse Good 在评论中指出的那样,在 C++11 中,当无法执行转换时std::stol(l),也有调用但抛出异常的方法。std::strtol

于 2013-09-25T11:34:03.167 回答