我正在尝试编写一个程序,该程序接受-十六进制,八进制和十进制-的输入,将它们存储在整数变量中,并输出它们以及将其转换为十进制形式。 例如:
用户输入:0x43、0123、65
程序输出:
0x43 hexadecimal converts to 67 decimal
0123 octal converts to 83 decimal
65 decimal converts to 65 decimal
所以显然我需要一种解释数字的方法,但是我不确定如何去做。 我尝试了各种方法,例如将它们读入函数并将其转换为字符串,反之亦然(请参见此处的代码示例),但是解释数字始终需要转换为某种破坏原始输入的格式。
我唯一想到的是重载>>运算符,该运算符一次读取一个字符,如果在输入的开头看到0x或0,则它将整个输入存储到字符串中,然后再将其读入int。 然后,程序将以某种方式必须在输出期间确定正确的操纵器。
不知道是否有更简单的方法来执行此操作,我们将为您提供帮助。
编辑:这已经解决,但是我决定在任何人感兴趣的情况下发布代码。
#include "std_lib_facilities.h"
void number_sys(string num, string& s)
{
if(num[0] == '0' && (num[1] != 'x' && num[1] != 'X')) s = "octal";
else if(num[0] == '0' && (num[1] == 'x' || num[1] == 'X')) s = "hexadecimal";
else s = "decimal";
}
int main()
{
cout << "Input numbers in hex, dec, or oct. Use 0xx to cancel.\n";
string a;
while(cin >> a){
if(a == "0xx")break;
string atype;
number_sys(a, atype);
int anum = strtol(a.c_str(), NULL, 0);
cout << a << setw(20-a.length()) << atype << setw(20) << "converts to" << setw(10)
<< anum << setw(10) << "decimal\n";
}
keep_window_open();
}