tri*_*ker 1 c++ numbers string-parsing
我正在尝试编写一个输入 - 十六进制,八进制和小数 - 的程序,将它们存储在整数变量中,并将它们与它们转换为十进制形式一起输出.例如:
用户输入:0x43,0123,65
方案产出:
0x43 hexadecimal converts to 67 decimal
0123 octal converts to 83 decimal
65 decimal converts to 65 decimal
Run Code Online (Sandbox Code Playgroud)
显然我需要一种解释数字的方法,但我不知道如何去做.我已经尝试了各种方法,例如将它们读入函数并将它们转换为字符串,反之亦然(请参阅此处查看代码示例),但解释数字始终需要转换为某种格式来破坏原始输入.
我唯一能想到的是重载一个>>运算符,它一次读取一个字符,如果它在输入的开头看到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();
}
Run Code Online (Sandbox Code Playgroud)
Dav*_*ong 11
看一下strtol函数.
char * args[3] = {"0x43", "0123", "65"};
for (int i = 0; i < 3; ++i) {
long int value = strtol(args[i], NULL, 0);
printf("%s converts to %d decimal\n", args[i], value);
}
Run Code Online (Sandbox Code Playgroud)
输出:
0x43 converts to 67 decimal
0123 converts to 83 decimal
65 converts to 65 decimal
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4181 次 |
最近记录: |