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

回答編集履歴

4

!= 0

2021/05/23 17:31

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -23,4 +23,36 @@
23
23
  puts(p ? "その英単語は、英文に含まれています。"
24
24
  : "その英単語は、英文に含まれていません。");
25
25
  }
26
- ```
26
+ ```
27
+ **追記2**
28
+ 次のように書いても実行結果は同じです。
29
+ ```C
30
+ #include <stdio.h> // scanf, printf, puts
31
+ #include <string.h> // strlen, strncmp, strtok
32
+ #include <ctype.h> // toupper
33
+
34
+ int main(void)
35
+ {
36
+ char str[50], word[15];
37
+
38
+ printf(">>");
39
+ scanf("%[^\n]", str);
40
+ printf(">>");
41
+ scanf("%s", word);
42
+ for (int i = 0; str[i] != '\0'; i++)
43
+ str[i] = toupper(str[i]);
44
+ int len = strlen(word);
45
+ for (int i = 0; i < len; i++)
46
+ word[i] = toupper(word[i]);
47
+ char *p = strtok(str," ");
48
+ while (p != NULL && strncmp(p, word, len) != 0)
49
+ p = strtok(NULL, " ");
50
+ if (p != NULL)
51
+ puts("その英単語は、英文に含まれています。");
52
+ else
53
+ puts("その英単語は、英文に含まれていません。");
54
+ }
55
+ ```
56
+ `!= '\0'`、`!= NULL`、`!= 0` はすべて省略できます。
57
+ これらは != の左の項が 0 ではないかどうかを判定しています。
58
+ for の第2式も while や if の式もその式の値が 0 でないかどうかで判定します。

3

コードの修正

2021/05/23 17:31

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -19,8 +19,7 @@
19
19
  int len = strlen(word);
20
20
  for (int i = 0; i < len; i++) word[i] = toupper(word[i]);
21
21
  char *p = strtok(str," ");
22
- for (; p; p = strtok(NULL, " "))
22
+ while (p && strncmp(p, word, len)) p = strtok(NULL, " ");
23
- if (!strncmp(p, word, len)) break;
24
23
  puts(p ? "その英単語は、英文に含まれています。"
25
24
  : "その英単語は、英文に含まれていません。");
26
25
  }

2

コードの修正

2021/05/22 16:20

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -18,10 +18,10 @@
18
18
  for (int i = 0; str[i]; i++) str[i] = toupper(str[i]);
19
19
  int len = strlen(word);
20
20
  for (int i = 0; i < len; i++) word[i] = toupper(word[i]);
21
- int ans = 1;
21
+ char *p = strtok(str," ");
22
- for (char *p = strtok(str," "); p; p = strtok(NULL, " "))
22
+ for (; p; p = strtok(NULL, " "))
23
- if (!(ans = strncmp(p, word, len))) break;
23
+ if (!strncmp(p, word, len)) break;
24
- puts(ans ? "その英単語は、英文に含まれていません。"
24
+ puts(p ? "その英単語は、英文に含まれていま。"
25
- : "その英単語は、英文に含まれていま。");
25
+ : "その英単語は、英文に含まれていません。");
26
26
  }
27
27
  ```

1

コードを追加

2021/05/22 16:17

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -1,4 +1,27 @@
1
1
  > ansへの代入の後にprintf関数を入れてansを表示させたところ、一回目のstrncmp関数で何が入ってきても0が代入されていました。
2
2
 
3
3
  ans だけでなく、str_len、word_len、n、in_str、in_word、large_str、
4
- large_word、p、w を表示して何が入っているか見てください。
4
+ large_word、p、w を表示して何が入っているか見てください。
5
+
6
+ **追記**
7
+ ```C
8
+ #include <stdio.h> // scanf, printf, puts
9
+ #include <string.h> // strlen, strncmp, strtok
10
+ #include <ctype.h> // toupper
11
+
12
+ int main(void)
13
+ {
14
+ char str[50], word[15];
15
+
16
+ printf(">>"), scanf("%[^\n]", str);
17
+ printf(">>"), scanf(" %[^\n]", word);
18
+ for (int i = 0; str[i]; i++) str[i] = toupper(str[i]);
19
+ int len = strlen(word);
20
+ for (int i = 0; i < len; i++) word[i] = toupper(word[i]);
21
+ int ans = 1;
22
+ for (char *p = strtok(str," "); p; p = strtok(NULL, " "))
23
+ if (!(ans = strncmp(p, word, len))) break;
24
+ puts(ans ? "その英単語は、英文に含まれていません。"
25
+ : "その英単語は、英文に含まれています。");
26
+ }
27
+ ```