回答編集履歴

1

質問者の疑問への対応を追記

2019/11/25 06:38

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -73,3 +73,63 @@
73
73
  ```
74
74
 
75
75
  このコードで理解できなところはどこですか?
76
+
77
+
78
+
79
+ **追記**
80
+
81
+ 123ABCxyz123 と入力したら、main の buf には "123ABCxyz123" が入ります。
82
+
83
+ Function の text は main の buf を参照しますから、
84
+
85
+ text[0] = '1' text[1] = '2' text[2] = '3'
86
+
87
+ text[3] = 'A' text[4] = 'B' text[5] = 'C'
88
+
89
+ text[6] = 'x' text[7] = 'y' text[8] = 'z'
90
+
91
+ text[9] = '1' text[10] = '2' text[11] = '3' text[12] = '\0'
92
+
93
+ となります。'xyz' が入っているところはどこにもありません。
94
+
95
+
96
+
97
+ 'x', 'y', 'z' の 3文字が並んで入っている
98
+
99
+ text[6], text[7], text[8] を見つけないといけません。
100
+
101
+
102
+
103
+ text[i]=='x' かつ text[i+1]=='y' かつ text[i+2]=='z' という
104
+
105
+ 条件を調べるのは当然ではありませんか?
106
+
107
+ text[i]=='x' または text[i+1]=='y' または text[i+2]=='z' という
108
+
109
+ 条件ではありませんよね。「かつ」「または」という表現をご存じないですか?
110
+
111
+ 「かつ」は &&、「または」は || だから、&& を使うという発想が出てきます。
112
+
113
+
114
+
115
+ それから、&&演算子の意味ですが、
116
+
117
+ 左オペランドが真なら、右オペランドを評価し、その真偽を結果とします
118
+
119
+ 左オペランドが偽なら、右オペランドは評価せず、演算結果を偽とします。
120
+
121
+
122
+
123
+ if の条件が真なら、"xyz" が見つかったのですから、この次のところ
124
+
125
+ text[9] から探索を続けなければいけません。
126
+
127
+ 今、i は 6 です。3つ進めたいのですが、for文に i++ があるので
128
+
129
+ ここでは、2つ進めておけば 3つ進みます。
130
+
131
+
132
+
133
+ else は if の条件が偽ですから、"xyz" は見つからなかったということになり
134
+
135
+ 文字を詰めるために text[j] = text[i] を実行し、j を進めます。