16進数、8進数、10進数の入力を受け取り、それらを整数変数に格納し、10進数形式への変換とともに出力するプログラムを作成しようとしています。例えば:
ユーザー入力: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();
}