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

質問編集履歴

1

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

2021/07/02 05:04

投稿

HOTEISON_
HOTEISON_

スコア3

title CHANGED
File without changes
body CHANGED
@@ -3,8 +3,18 @@
3
3
  入力された文字列を逆にしたいのですが最後にprintf関数で表示されません。
4
4
  例えば abcdならdcbaとなるようにしたいです。
5
5
 
6
+ 自分が想定しているこのプログラムの動き方
6
7
 
8
+ scanfで入力された文字列をchar型関数strに格納。
9
+ 最初のfor文で文字数をカウントし、int型変数iに格納
10
+ int型変数flagにiを2で割った余りを格納する。あまり1の時は文字数っが偶数で0のときは奇数であると判断する。
11
+ 文字数が奇数のとき、つまりflag=0のとき「j番目の文字をi-j番目の文字と入れ替える」という動作を文字列の半分まで繰り返す。
12
+ 文字列が偶数のとき、つまりflag=1のとき「j番目の文字をi-j番目のもじと入れ替える」という動作を文字列の半分ー1まで繰り返す。
13
+ その結果をprintf関数で出力する。
7
14
 
15
+
16
+
17
+
8
18
  ### 該当のソースコード
9
19
 
10
20
  ```C
@@ -12,48 +22,37 @@
12
22
  #define num 100
13
23
  int main()
14
24
  {
15
- char tmp,str[num];
25
+  char tmp,str[num];
16
- int i,j;
26
+  int i,j;
17
- int flag;
27
+  int flag
28
+  
29
+ printf("文字列を入力してください。:");
30
+ scanf("%s", str);
18
31
 
19
-
20
- printf("文字列を入力してください。:");
32
+ for (i = 0; str[i] != '\0' ; i++) {
33
+  }
34
+  flag = i % 2;
35
+  
36
+ if (flag == 0) {
21
- scanf("%s", str);
37
+ for (j = 0; j < i / 2; j++) {
22
-
38
+ tmp = str[j];
39
+ str[j] = str[i - j];
40
+ str[i - j] = tmp;
41
+           }
42
+ }
23
43
 
24
-
25
44
 
26
-
27
-
28
-
29
- for (i = 0; str[i] != '\0' ; i++) {
30
- }
31
-
32
- flag = i % 2;
45
+ else{
33
-
34
- if (flag == 0) {
35
- for (j = 0; j < i / 2; j++) {
46
+ for (j = 0; j < i / 2; j++) {
36
- tmp = str[j];
47
+ tmp = str[j];
37
- str[j] = str[i - j];
48
+ str[j] = str[i - j];
38
- str[i - j] = tmp;
49
+ str[i - j] = tmp;
39
-
50
+ break;
40
51
  }
41
52
  }
42
-
43
-
44
- else{
45
- for (j = 0; j < i / 2; j++) {
46
- tmp = str[j];
47
- str[j] = str[i - j];
48
- str[i - j] = tmp;
49
- break;
50
- }
51
- }
52
53
  printf("逆の%s", str);
53
-
54
-
55
- return 0;
54
+ return 0;
56
- }
55
+ }
57
56
 
58
57
 
59
58