teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

文字列配列の参照方法を訂正

2020/09/04 20:57

投稿

mjk
mjk

スコア303

answer CHANGED
@@ -1,30 +1,27 @@
1
1
  ※単語はそのままだと他国語の文字コード系のエラーが出たので数字で置き換えました。
2
-
2
+ 元のコードの原型はありませんがロジックだけでも参考になればと思います。
3
3
  ```C
4
- #define _CRT_SECURE_NO_WARNINGS
5
- #include <stdio.h> //sprintf
4
+ #include <stdio.h>
6
- #include <stdlib.h> //malloc
7
- #include <string.h> //strcpy
8
5
 
9
- void getTurkishNumber(int n) {
6
+ void func(int n) {
10
- char unit[10][7] = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"};
7
+ const char unit[10][3] = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"};
11
- char tens[9][8] = {"10", "20", "30", "40", "50", "60", "70", "80", "90"};
8
+ const char tens[9][4] = {"10", "20", "30", "40", "50",
9
+ "60", "70", "80", "90"};
12
10
  if (n / 10) {
13
11
  if (n % 10) {
14
- printf("%02d %s %s\n", n, &tens[(n / 10) - 2][8], &unit[(n % 10) - 1][7]);
12
+ printf("%02d %s %s\n", n, &tens[(n / 10)], &unit[(n % 10)]);
15
13
  } else {
16
- printf("%02d %s\n", n, &tens[(n / 10) - 2][8]);
14
+ printf("%02d %s\n", n, &tens[(n / 10)]);
17
15
  }
18
16
  } else {
19
- printf("%02d %s\n", n, &unit[n - 1][7]);
17
+ printf("%02d %s\n", n, &unit[n]);
20
18
  }
21
19
  }
22
20
  int main() {
23
21
  for (int i = 0; i < 100; i++) {
24
- getTurkishNumber(i);
22
+ func(i);
25
23
  }
26
24
  getchar();
27
- return 0;
28
25
  }
29
26
  ```
30
27
  ```output

1

10,20の時の修正

2020/09/04 20:56

投稿

mjk
mjk

スコア303

answer CHANGED
@@ -10,7 +10,11 @@
10
10
  char unit[10][7] = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"};
11
11
  char tens[9][8] = {"10", "20", "30", "40", "50", "60", "70", "80", "90"};
12
12
  if (n / 10) {
13
+ if (n % 10) {
13
- printf("%02d %s %s\n", n, &tens[(n / 10) - 2][8], &unit[(n % 10) - 1][7]);
14
+ printf("%02d %s %s\n", n, &tens[(n / 10) - 2][8], &unit[(n % 10) - 1][7]);
15
+ } else {
16
+ printf("%02d %s\n", n, &tens[(n / 10) - 2][8]);
17
+ }
14
18
  } else {
15
19
  printf("%02d %s\n", n, &unit[n - 1][7]);
16
20
  }
@@ -22,9 +26,9 @@
22
26
  getchar();
23
27
  return 0;
24
28
  }
25
-
26
29
  ```
27
30
  ```output
31
+
28
32
  00 0
29
33
  01 1
30
34
  02 2
@@ -35,7 +39,7 @@
35
39
  07 7
36
40
  08 8
37
41
  09 9
38
- 10 10 0
42
+ 10 10
39
43
  11 10 1
40
44
  12 10 2
41
45
  13 10 3
@@ -45,5 +49,6 @@
45
49
  17 10 7
46
50
  18 10 8
47
51
  19 10 9
52
+ 20 20
48
- 20 20 0
53
+ 21 20 1
49
54
  ```