fork download
  1. #include<stdio.h>
  2. #include<string.h>
  3.  
  4. int YenCov(int, int, char *, int);
  5.  
  6. int main(void) {
  7. int kingaku;
  8. int mode;
  9. int datsize;
  10. int rtn;
  11. char kindat[15];
  12.  
  13. printf("金額入力==>");
  14. scanf("%d", &kingaku);
  15.  
  16. printf("モード(1 or 2)==>");
  17. scanf("%d", &mode);
  18.  
  19. printf("データサイズ==>");
  20. scanf("%d", &datsize);
  21.  
  22. rtn = YenCov(kingaku, mode, kindat, datsize);
  23.  
  24. if (rtn == -1) {
  25. printf("モードエラー\n");
  26. } else if (rtn == -2) {
  27. printf("領域不足エラー\n");
  28. } else {
  29. printf("編集金額 = %s\n", kindat);
  30. }
  31.  
  32. return 0;
  33. }
  34.  
  35. int YenCov(int kin, int md, char *bp, int size) {
  36. char buf1[15]; /* 対象データ格納用 */
  37. char buf2[15]; /* \マーク編集結果を格納 */
  38. int len; /* 対象データ文字数格納用 */
  39. int cmcnt; /* 挿入カンマ数カウンタ */
  40. int cnt; /* コピー文字数カウンタ */
  41. int i, j;
  42.  
  43. cnt = 0;
  44.  
  45. if (md != 1 && md != 2) {
  46. return -1;
  47. }
  48.  
  49. sprintf(buf1, "\\%d", kin); /* 金額を文字列としてbuf1に格納 */
  50.  
  51. len = strlen(buf1);
  52. if (md == 1) {
  53. cmcnt = 0;
  54. } else {
  55. cmcnt = (len - 2) / 3;
  56. }
  57.  
  58. if (len + cmcnt + 1 > size) {
  59. return -2;
  60. }
  61.  
  62. if (md == 1) {
  63. strcpy(buf2, buf1);
  64. } else {
  65. buf2[len + cmcnt] = '\0';
  66. for (i = len - 1; i >= 0; i--) {
  67. j = i + cmcnt;
  68. if (cnt == 3 && cmcnt != 0) {
  69. /* ①番 カンマ代入 */
  70. buf2[j] = ',';
  71. cnt = 0;
  72. cmcnt--;
  73. /* ②番 添え字の更新 */
  74. j--;
  75. }
  76. /* ③番 数値文字の結果の代入 */
  77. buf2[j] = buf1[i];
  78. cnt++;
  79. }
  80. }
  81. strcpy(bp, buf2);
  82. return 0;
  83. }
Success #stdin #stdout 0.02s 1680KB
stdin
123456789
2
15
stdout
金額入力==>モード(1 or 2)==>データサイズ==>編集金額 = \123,456,789