8進数の整数を表わす文字列を受け取り、その値を関数値とする関数
16(アルファベットを含む)進数の整数を表わす文字列を受け取り、その値を関数値とする関数 を自
分でつくりたいのですが、どうすればいいのですか?
sscanf()を使うといいでしょう。printf()で整数を8進、16進に整形することはできますよね?
あるいは strtoul。 おそらくこっちの方が'軽快'です。
%o,%xを使うということですか?これも strtol も使っては、いけないと言われました。でき
ますか。
学校の課題かなんかだったんですか?
どこまで自分で考えた上で質問していますか?
まず自分が、「与えられた10進数を8進、16進表記で書きなさい」と言われたときに何を
どうするか見えていますか?
こんばんわ、RAPTです。
> その値を関数値とする関数
「関数値」ってなんでしょう? この意味がわからないのですが。
関数の引数、ってことですか?
ってゆーか、何をしたいのかが、訳分かりません。
16進数→10進数
8進数→10進数
の変換をしたいってことですか?
> %o,%xを使うということですか?これも strtol も使っては、いけないと言われました。
ん? では、「宿題」ってことですね?
「宿題」を出す意図は、アルゴリズムの勉強をして欲しい、という意図なので、
他人に聞いて解決してはいけません。自分で、どうすればいいかを考えること
に意味があります。逆に、こんな簡単なのを、自分で解かないでいては、今後
も他人に頼ってしまいがちになります。これでは意味がありません。
目的が、「16進数→10進数」、「8進数→10進数」の変換だとして、
そもそも、カズさんは、紙と鉛筆を使って、8進数、16進数から10進数に、
自力で変換することができますか? できないんであれば、まずその方法を
勉強する必要があります。できるんであれば、あとは、その処理をそのまま
コーディングすればいいだけです。
Windows98/VC++6.0std/SDK-may2002/ATL3.0/WTL7.0
>まず自分が、「与えられた10進数を8進、16進表記で書きなさい」と
...逆でしたね。失礼。
> %o,%xを使うということですか?これも strtol も使っては、
> いけないと言われました。できますか。
できますとも。
int oct2int(const std::string& str) {
std::istringstream stream(str);
int result;
stream >> std::oct >> result;
return result;
}
int hex2int(const std::string& str) {
std::istringstream stream(str);
int result;
stream >> std::hex >> result;
return result;
}
# 宿題なの? 使っていいよ。呼び出しくらうかも知れないけど^^;
>「関数値」ってなんでしょう? この意味がわからないのですが。
>関数の引数、ってことですか?
>ってゆーか、何をしたいのかが、訳分かりません。
>16進数→10進数
>8進数→10進数
>の変換をしたいってことですか?
普通「関数値」と言えば「その関数が返す値」を指しますよね。
ですから要するに strtoul の 8進数/16進数文字列専用版のようなものを書けということでし
ょう。
数値を8進数/10進数/16進数に変換ってそんなのはないですし。(←ヒント
# と書いてもきっと誰かが答えをずばり書いちゃうのでしょう・・・
基礎の関数を作るという宿題なのでしょうか。
16進数の場合
結果データを初期化
入力文字数分のループ
結果データ*=16
1バイトのデータ
文字がOK?
OKでなければ異常return
データをASCIIからBINに変換(テーブルでも作ってください。)
結果データに変換したデータを加算する。
ループの終了
結果データを返す
こんな感じでどうでしょう
こんばんは、RAPTです。
た さん>
> 普通「関数値」と言えば「その関数が返す値」を指しますよね。
なるほど、そうなんですか。
# σ(^^)は系統的にC/C++言語をやったことがなかったせいか、
# 「関数値」って言葉を知りませんでした。
# にしても、「関数値」の型が明示されていませんが。
Windows98/VC++6.0std/SDK-may2002/ATL3.0/WTL7.0
ちなみに、マルチですね。
x進数は・・・
1.桁がひとつ増えれば(小数点が右にひとつズレたら)元のx倍になる。
2.桁がひとつ減れば(小数点が左にひとつズレたら)元の1/xになる。
というのが基本です。これはわかりますよね?
'0'という文字の文字コードは48ですから、与えられた文字から48を引けば
文字→数値の変換ができますよね?
16進数の場合は更に'A'~'F'や'a'~'f'を考慮しなければいけませんが、
これについては、とりあえず48を引いてみて、その答が10以上なら
更に7を引けば'A'~'F'に対応可能ですし、それが16を超えるようなら・・・
っとと、ご自分で考えてみましょう。
(ヒント:'A'の文字コードは65、'a'の文字コードは97です)
上記2点を踏まえれば、自ずとやるべきことが見えてくると思いますよ。
で、解決したんでしょうか。。
