質問編集履歴
1
1, ロジックの説明を追記しました。2, 不規則な改行が多くて見づらいとご指摘をいただいたので改行を少なめにしました。
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
|
-
|
25
|
+
char tmp,str[num];
|
16
|
-
|
26
|
+
int i,j;
|
17
|
-
|
27
|
+
int flag
|
28
|
+
|
29
|
+
printf("文字列を入力してください。:");
|
30
|
+
scanf("%s", str);
|
18
31
|
|
19
|
-
|
20
|
-
|
32
|
+
for (i = 0; str[i] != '\0' ; i++) {
|
33
|
+
}
|
34
|
+
flag = i % 2;
|
35
|
+
|
36
|
+
if (flag == 0) {
|
21
|
-
|
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
|
-
|
45
|
+
else{
|
33
|
-
|
34
|
-
if (flag == 0) {
|
35
|
-
|
46
|
+
for (j = 0; j < i / 2; j++) {
|
36
|
-
|
47
|
+
tmp = str[j];
|
37
|
-
|
48
|
+
str[j] = str[i - j];
|
38
|
-
|
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
|
-
|
54
|
+
return 0;
|
56
|
-
|
55
|
+
}
|
57
56
|
|
58
57
|
|
59
58
|
|