如何在36号基数输入数字?

时间:2013-09-25 11:29:28

标签: c++

我该怎么做?

int number;
cin >> number;

我希望在基数36中输入数字(它们通过假设输入基数36)。在底座36中,装置10,B表示11,C 12等。 C ++如何理解'A'不是一个字符,而是一个基数为36的数字,并且'cin>>'为此工作?

2 个答案:

答案 0 :(得分: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.

答案 1 :(得分:5)

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

  

base-2整数的有效数字集合为01,表示base-3整数   是012,依此类推。对于大于10的碱基,有效数字包括   字母字符,从Aa开始,用于基数为11的整数,到 Zz为   base-36 integer 。字符的大小写被忽略。在非默认   区域设置,可以接受其他数字格式。

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