• ベストアンサー

金額!?

こんにちは。またまた質問させていただきます。 C言語のご質問です。 double okane; /* お金 */ <何らかの処理で変数okaneにデータ挿入> この取得したokaneの中身を たとえば、10000なら→\10,000としたいのですが、 自分なりにかんがえたのですがちょっとわかりませんでした。 もちろん\10,000 や\5,000や\100が入る変数は配列です。 質問自体が意味不明かもしれませんが ご回答宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.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; } ポイントは、 ・三桁区切りのカンマは、頭から入れていくと面倒だけど、お尻からいれてゆくと、  それほど面倒じゃない。 ・すでにある文字列に何かを挿入するのは面倒だけど、一文字ずつコピーしながら  適当なときに余計な文字(カンマ)を入れるのは、そんなに面倒じゃない ということですね。

653
質問者

お礼

すぅすごいですね。ありがとうございます。 実際に実行してみました。 お願いした通りでした(笑) ありがとうございました。

関連するQ&A