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

回答編集履歴

1

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

2019/11/25 06:38

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -35,4 +35,34 @@
35
35
  text[j] = '\0';
36
36
  }
37
37
  ```
38
- このコードで理解できなところはどこですか?
38
+ このコードで理解できなところはどこですか?
39
+
40
+ **追記**
41
+ 123ABCxyz123 と入力したら、main の buf には "123ABCxyz123" が入ります。
42
+ Function の text は main の buf を参照しますから、
43
+ text[0] = '1' text[1] = '2' text[2] = '3'
44
+ text[3] = 'A' text[4] = 'B' text[5] = 'C'
45
+ text[6] = 'x' text[7] = 'y' text[8] = 'z'
46
+ text[9] = '1' text[10] = '2' text[11] = '3' text[12] = '\0'
47
+ となります。'xyz' が入っているところはどこにもありません。
48
+
49
+ 'x', 'y', 'z' の 3文字が並んで入っている
50
+ text[6], text[7], text[8] を見つけないといけません。
51
+
52
+ text[i]=='x' かつ text[i+1]=='y' かつ text[i+2]=='z' という
53
+ 条件を調べるのは当然ではありませんか?
54
+ text[i]=='x' または text[i+1]=='y' または text[i+2]=='z' という
55
+ 条件ではありませんよね。「かつ」「または」という表現をご存じないですか?
56
+ 「かつ」は &&、「または」は || だから、&& を使うという発想が出てきます。
57
+
58
+ それから、&&演算子の意味ですが、
59
+ 左オペランドが真なら、右オペランドを評価し、その真偽を結果とします
60
+ 左オペランドが偽なら、右オペランドは評価せず、演算結果を偽とします。
61
+
62
+ if の条件が真なら、"xyz" が見つかったのですから、この次のところ
63
+ text[9] から探索を続けなければいけません。
64
+ 今、i は 6 です。3つ進めたいのですが、for文に i++ があるので
65
+ ここでは、2つ進めておけば 3つ進みます。
66
+
67
+ else は if の条件が偽ですから、"xyz" は見つからなかったということになり
68
+ 文字を詰めるために text[j] = text[i] を実行し、j を進めます。