[質問する」ボタンを押す前に、コードの部分を選択し <code> を押してください。
xyzをそれぞれ一個ずつ認識させればいいのだと思いますが、やり方がわかりません。
C
1#include <stdio.h>
2#include <stdlib.h>
3
4void Function(char[]);
5
6int main(void)
7{
8 char buff[32];
9
10 printf("文字を入力\n");
11 gets_s(buff, 31);
12 Function(buff);
13 printf("%s\n", buff);
14 return 0;
15}
16
17void Function(char text[])
18{
19 int i, j;
20
21 for (i = 0, j = 0; text[i] != '\0'; i++) {
22 if (text[i] == 'x' && text[i+1] == 'y' && text[i+2] == 'z') {
23 i += 2;
24 }
25 else {
26 text[j] = text[i];
27 j++;
28 }
29 }
30 text[j] = '\0';
31}
このコードで理解できなところはどこですか?
追記
123ABCxyz123 と入力したら、main の buf には "123ABCxyz123" が入ります。
Function の text は main の buf を参照しますから、
text[0] = '1' text[1] = '2' text[2] = '3'
text[3] = 'A' text[4] = 'B' text[5] = 'C'
text[6] = 'x' text[7] = 'y' text[8] = 'z'
text[9] = '1' text[10] = '2' text[11] = '3' text[12] = '\0'
となります。'xyz' が入っているところはどこにもありません。
'x', 'y', 'z' の 3文字が並んで入っている
text[6], text[7], text[8] を見つけないといけません。
text[i]=='x' かつ text[i+1]=='y' かつ text[i+2]=='z' という
条件を調べるのは当然ではありませんか?
text[i]=='x' または text[i+1]=='y' または text[i+2]=='z' という
条件ではありませんよね。「かつ」「または」という表現をご存じないですか?
「かつ」は &&、「または」は || だから、&& を使うという発想が出てきます。
それから、&&演算子の意味ですが、
左オペランドが真なら、右オペランドを評価し、その真偽を結果とします
左オペランドが偽なら、右オペランドは評価せず、演算結果を偽とします。
if の条件が真なら、"xyz" が見つかったのですから、この次のところ
text[9] から探索を続けなければいけません。
今、i は 6 です。3つ進めたいのですが、for文に i++ があるので
ここでは、2つ進めておけば 3つ進みます。
else は if の条件が偽ですから、"xyz" は見つからなかったということになり
文字を詰めるために text[j] = text[i] を実行し、j を進めます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/25 04:13
2019/11/25 04:49