• ベストアンサー

数字列を3桁ごとにカンマで区切る方法

すいません、今授業の課題で下のような課題をもらったんです。 数字を読み込み、カンマ編集して出力する。 例) 入力:1000000 出力:1,000,000 注) メイン処理のみで製作すること    ポインタも使わない    入力はscanfで 三桁区切りのカンマは、後ろから入れていくということは分かるのですが、書きかたがいまいちわかりません。どなたか教えてください。お願いします。

  • atch
  • お礼率56% (9/16)

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

  • ベストアンサー
  • gimmick
  • ベストアンサー率49% (134/270)
回答No.2

Cmachineという事はC言語を使うという事ですね? 言語や環境を書いておかないと適切な回答は得られませんよ。 ------------------------------------------------- #include <stdio.h> #include <string.h> #define ARRAY_SIZE 128 int main() {   char input[ARRAY_SIZE];   char output[ARRAY_SIZE];   int len;   int i = 0;   int j = 0;   memset(input, 0, ARRAY_SIZE);   memset(output, 0, ARRAY_SIZE);   scanf("%s", input);   len = strlen(input);   while (i < len) {     output[j] = input[i];     i++;     j++;     if ( (len - i) % 3 == 0 ) {       output[j] = ',';       j++;     }   }   if (output[j - 1] == ',') {     output[j - 1] = '\0';   }   printf("output = %s\n", output);   return 0; } ------------------------------------------------- エラーチェックが甘いけど、入力が正しければ、正常に動作すると思います。全角スペース入りなので、削除してからコンパイルしてください。

atch
質問者

補足

書き込みありがとうございます。 すいません、言語はCで、コンパイラはCmachineです。 gimmikさんのプログラムできちんと動きましたが、#define ARRAY_SIZE 128 というのがまだ教わってないのでよくわかりません。 #define を使わずに実行する方法は無いでしょうか? 質問ばかりで申し訳ありません。

その他の回答 (2)

  • PAPA0427
  • ベストアンサー率22% (559/2488)
回答No.3

はじめまして。 >、#define ARRAY_SIZE 128 というのがまだ教わってないのでよくわかりません。 ARRAY_SIZEは128です。って事です。宣言文でこれ以降ARRAY_SIZEが出てきたら128と読み替えてね。 >#define を使わずに実行する方法は無いでしょうか? ARRAY_SIZEと記述されている部分を全て128に変更してください。#defineの行を削除。

atch
質問者

お礼

ありがとうございます。 教えていただいたソースを参考に、自分なりに考えてみたら、できました!! みなさん、どうもありがとうございました。

  • isobeman
  • ベストアンサー率41% (17/41)
回答No.1

文字列として処理しても良ければ、、、 #include <stdio.h> #include <string.h> int main(int argc, char* argv[]) { char chrInput[128]; scanf( "%s", &chrInput ); int nLen = strlen( chrInput ); int nParts = nLen / 3; int nOdd = nLen % 3; char chrOutput[128]; chrOutput[0] = '\0'; if( nOdd ) { strncat( chrOutput, chrInput, nOdd ); } for( int i=0; i<nParts; i++ ) { strcat( chrOutput, "," ); strncat( chrOutput, &chrInput[nOdd+i*3], 3 ); } printf( "Result = %s", chrOutput ); return 0; }

atch
質問者

補足

書きこみありがとうございます! 初心者の研修なので、コンパイラはCmachineを使うことを義務付けられています。 Cマシーンでは9行目、int nLen = strlen(chrInput); の所でエラーが出てしまいます…。 どうしたらいいでしょう?

関連するQ&A

  • 数字の3桁表記

    商社に勤めております。 大きい数字を口に出して言うとき、日本語と数字表記の3桁区切りという不合理にいまだなじまず、気を使います。 1.アジア諸国に多いような気がしますが、日本同様数字は4桁区切り、というのは他にどんな国がありますか? 2.やはりその国では4桁ごとにカンマを打つという合理性を保っていますか?

  • 「カンマ」と「コンマ」は同じ語源?

    今まで、何となく「カンマ」と「コンマ」は同じ語源で、基本的には同じものを指すのではないかと思っていました。 しかし、数字の桁区切りはカンマですが、「コンマ零点五秒」などと使う場合のコンマは小数点のことを意味し、言葉を入れ替えては使いません。厳然たる棲み分けがされています。 もしや、他人のそら似で全く別の語源から来ているのでしょうか? また、もし同じ語源なら、桁区切りと小数点の使い分けは、どのようにして発生したのでしょうか?

  • 通貨表示で3桁毎にカンマ(?)を入れたいのですが・・・

    cgiで価格一覧の様なプログラムをつくったのですが、標題の通り通貨表示で3桁毎にカンマ(?)を入れたいのですが、データがカンマ区切りのcsvですし、そのままではできないという話も聞いたような記憶があります。そーいった処理の仕方を教えてください。

    • ベストアンサー
    • CGI
  • エクセル:桁区切り「カンマ」でセルが分割されて貼り付けされてしまう

    仕事で社内のシステムから売上の情報をコピーしてエクセルに貼り付けて処理をしようとしたところ、コピーした数字に「桁区切りのカンマ","」がある関係で、 たとえば 1,234,567 という数字が 1 と 234 と 567 とセルが分割されて貼り付けられてしまいます。 CSVファイルのカンマ区切りデータと同じように情報がカンマで分割されてしまっているようなのですが、貼り付けの際に分割されないようにするにはどうしたらよいでしょうか? ちなみに、これらデータはスペースで区切られているので一度テキストファイルに保存して、CSVを開くときの区切り文字の設定を「スペース」に設定すればうまく開くのはわかるのですが、コピーして即貼り付けのときにこのようになることを回避する方法はあるのでしょうか?マクロを組んでも構いません。 どうぞ、ご教授、宜しくお願いします。

  • エクセル 常に桁区切りにしたい

    エクセルを使用していますが、 数字を入力する際、 常に桁区切りのカンマを入れたいのですが、 そういう設定は有りますか? 教えてください。

  • ワード差し込み印刷時の数字にカンマを入れたい

    ワードで差し込み印刷をする際、データはエクセルファイルで、エクセルファイルのなかでは数字の表示を桁区切りスタイルにしていますが、差込にすると普通に数字のになってしまいます。差込んでも桁区切りスタイルのままにさせることは出来ますでしょうか? 私がない知恵を絞って考えたのは、「元のエクセルファイルの数字を最初から文字列のカンマが入ったものにする」なのですが、文字列にするまではできても、その後カンマをいれる方法がわからないのです。 よい方法はあるのでしょうか??

  • ポインタを使用 [数字列を数値に変換]

    カンマ(,)区切りの数字列を ポインタを使って 数値に変換したいのですが、わかりません。 教えてください。お願いします。 char data[]="5436,434";

  • Excel 桁区切りの カンマ ショートカットキー

    Excel2003使用です。 数字を入力した際の 桁区切りをよく使うのですが、 簡単に入れられる、 ショートカットキーはありますか? 教えてください。

  • 様々な桁の数字を、一様の桁になおす関数

    エクセル2010を使用しているものです。 現在各セルに様々な桁の数字が入力されています。 例    2012   354861   811021354   80011687   5447845   741741 これらの数字を、頭に0をつけて全て12桁に直したいです。 例だと、2012    →000000002012      354864   →000000354864      811021354 →000811021354 どのような関数を作ればこのような処理が一括でできるでしょうか?教えてください。よろしくお願いします。

  • エクセルの検索機能で数字を探すとき、桁区切りスタイルの数字は「検索対象

    エクセルの検索機能で数字を探すとき、桁区切りスタイルの数字は「検索対象」を「値」ではなく「数式」にすると探せるのですが、SUMなど関数で表示している桁区切りスタイルの数値は検索できません。 表示形式を「標準」にすると探せるのですが、コンマがついた形式で検索はできないでしょうか? よろしくお願いいたします。

専門家に質問してみよう