- ベストアンサー
金額!?
こんにちは。またまた質問させていただきます。 C言語のご質問です。 double okane; /* お金 */ <何らかの処理で変数okaneにデータ挿入> この取得したokaneの中身を たとえば、10000なら→\10,000としたいのですが、 自分なりにかんがえたのですがちょっとわかりませんでした。 もちろん\10,000 や\5,000や\100が入る変数は配列です。 質問自体が意味不明かもしれませんが ご回答宜しくお願い致します。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
ざっと書いてみました。こんな感じ? #include <stdio.h> char* print_with_comma(char* buf, double v) { char work[1024]; char* s; char* t; int n; /* まずは、普通に文字列に */ sprintf(work, "%d", (int)v); /* お尻からたどり、3桁ごとにカンマを入れながら work → buf へコピー */ s = work + strlen(work); t = buf; n = 3; while (s != work) { *t++ = *--s; if (--n == 0 && s != work) { *t++ = ','; n = 3; } } *t++ = '\\'; *t = '\0'; /* ひっくり返す */ t = buf; s = buf + strlen(buf) - 1; while (t < s) { char x; x = *s; *s = *t; *t = x; --s; ++t; } return buf; } int main() { char buf[256]; printf("%s\n", print_with_comma(buf, 1)); printf("%s\n", print_with_comma(buf, 12)); printf("%s\n", print_with_comma(buf, 123)); printf("%s\n", print_with_comma(buf, 1234)); printf("%s\n", print_with_comma(buf, 12345)); printf("%s\n", print_with_comma(buf, 123456)); printf("%s\n", print_with_comma(buf, 1234567)); printf("%s\n", print_with_comma(buf, 12345678)); printf("%s\n", print_with_comma(buf, 123456789)); return 0; } ポイントは、 ・三桁区切りのカンマは、頭から入れていくと面倒だけど、お尻からいれてゆくと、 それほど面倒じゃない。 ・すでにある文字列に何かを挿入するのは面倒だけど、一文字ずつコピーしながら 適当なときに余計な文字(カンマ)を入れるのは、そんなに面倒じゃない ということですね。
お礼
すぅすごいですね。ありがとうございます。 実際に実行してみました。 お願いした通りでした(笑) ありがとうございました。