質問編集履歴

1

1, ロジックの説明を追記しました。2, 不規則な改行が多くて見づらいとご指摘をいただいたので改行を少なめにしました。

2021/07/02 05:04

投稿

HOTEISON_
HOTEISON_

スコア3

test CHANGED
File without changes
test CHANGED
@@ -5,6 +5,26 @@
5
5
  入力された文字列を逆にしたいのですが最後にprintf関数で表示されません。
6
6
 
7
7
  例えば abcdならdcbaとなるようにしたいです。
8
+
9
+
10
+
11
+ 自分が想定しているこのプログラムの動き方
12
+
13
+
14
+
15
+ scanfで入力された文字列をchar型関数strに格納。
16
+
17
+ 最初のfor文で文字数をカウントし、int型変数iに格納
18
+
19
+ int型変数flagにiを2で割った余りを格納する。あまり1の時は文字数っが偶数で0のときは奇数であると判断する。
20
+
21
+ 文字数が奇数のとき、つまりflag=0のとき「j番目の文字をi-j番目の文字と入れ替える」という動作を文字列の半分まで繰り返す。
22
+
23
+ 文字列が偶数のとき、つまりflag=1のとき「j番目の文字をi-j番目のもじと入れ替える」という動作を文字列の半分ー1まで繰り返す。
24
+
25
+ その結果をprintf関数で出力する。
26
+
27
+
8
28
 
9
29
 
10
30
 
@@ -26,75 +46,57 @@
26
46
 
27
47
  {
28
48
 
29
- char tmp,str[num];
49
+  char tmp,str[num];
30
50
 
31
- int i,j;
51
+  int i,j;
32
52
 
33
- int flag;
53
+  int flag
54
+
55
+  
56
+
57
+ printf("文字列を入力してください。:");
58
+
59
+ scanf("%s", str);
34
60
 
35
61
 
36
62
 
63
+ for (i = 0; str[i] != '\0' ; i++) {
37
64
 
65
+  }
38
66
 
39
- printf("文字列を入力してください。:");
67
+  flag = i % 2;
40
68
 
41
- scanf("%s", str);
69
+  
42
70
 
71
+ if (flag == 0) {
43
72
 
73
+ for (j = 0; j < i / 2; j++) {
44
74
 
45
-
75
+ tmp = str[j];
76
+
77
+ str[j] = str[i - j];
78
+
79
+ str[i - j] = tmp;
80
+
81
+           }
82
+
83
+ }
46
84
 
47
85
 
48
86
 
49
87
 
50
88
 
51
-
89
+ else{
52
90
 
53
-
91
+ for (j = 0; j < i / 2; j++) {
54
92
 
93
+ tmp = str[j];
55
94
 
95
+ str[j] = str[i - j];
56
96
 
57
- for (i = 0; str[i] != '\0' ; i++) {
97
+ str[i - j] = tmp;
58
98
 
59
- }
60
-
61
-
62
-
63
- flag = i % 2;
64
-
65
-
66
-
67
- if (flag == 0) {
68
-
69
- for (j = 0; j < i / 2; j++) {
70
-
71
- tmp = str[j];
72
-
73
- str[j] = str[i - j];
74
-
75
- str[i - j] = tmp;
76
-
77
-
78
-
79
- }
80
-
81
- }
82
-
83
-
84
-
85
-
86
-
87
- else{
88
-
89
- for (j = 0; j < i / 2; j++) {
90
-
91
- tmp = str[j];
92
-
93
- str[j] = str[i - j];
94
-
95
- str[i - j] = tmp;
96
-
97
- break;
99
+ break;
98
100
 
99
101
  }
100
102
 
@@ -102,13 +104,9 @@
102
104
 
103
105
  printf("逆の%s", str);
104
106
 
105
-
107
+ return 0;
106
108
 
107
-
108
-
109
- return 0;
110
-
111
- }
109
+ }
112
110
 
113
111
 
114
112