回答編集履歴

4

!= 0

2021/05/23 17:31

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -49,3 +49,67 @@
49
49
  }
50
50
 
51
51
  ```
52
+
53
+ **追記2**
54
+
55
+ 次のように書いても実行結果は同じです。
56
+
57
+ ```C
58
+
59
+ #include <stdio.h> // scanf, printf, puts
60
+
61
+ #include <string.h> // strlen, strncmp, strtok
62
+
63
+ #include <ctype.h> // toupper
64
+
65
+
66
+
67
+ int main(void)
68
+
69
+ {
70
+
71
+ char str[50], word[15];
72
+
73
+
74
+
75
+ printf(">>");
76
+
77
+ scanf("%[^\n]", str);
78
+
79
+ printf(">>");
80
+
81
+ scanf("%s", word);
82
+
83
+ for (int i = 0; str[i] != '\0'; i++)
84
+
85
+ str[i] = toupper(str[i]);
86
+
87
+ int len = strlen(word);
88
+
89
+ for (int i = 0; i < len; i++)
90
+
91
+ word[i] = toupper(word[i]);
92
+
93
+ char *p = strtok(str," ");
94
+
95
+ while (p != NULL && strncmp(p, word, len) != 0)
96
+
97
+ p = strtok(NULL, " ");
98
+
99
+ if (p != NULL)
100
+
101
+ puts("その英単語は、英文に含まれています。");
102
+
103
+ else
104
+
105
+ puts("その英単語は、英文に含まれていません。");
106
+
107
+ }
108
+
109
+ ```
110
+
111
+ `!= '\0'`、`!= NULL`、`!= 0` はすべて省略できます。
112
+
113
+ これらは != の左の項が 0 ではないかどうかを判定しています。
114
+
115
+ for の第2式も while や if の式もその式の値が 0 でないかどうかで判定します。

3

コードの修正

2021/05/23 17:31

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -40,9 +40,7 @@
40
40
 
41
41
  char *p = strtok(str," ");
42
42
 
43
- for (; p; p = strtok(NULL, " "))
43
+ while (p && strncmp(p, word, len)) p = strtok(NULL, " ");
44
-
45
- if (!strncmp(p, word, len)) break;
46
44
 
47
45
  puts(p ? "その英単語は、英文に含まれています。"
48
46
 

2

コードの修正

2021/05/22 16:20

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -38,15 +38,15 @@
38
38
 
39
39
  for (int i = 0; i < len; i++) word[i] = toupper(word[i]);
40
40
 
41
- int ans = 1;
41
+ char *p = strtok(str," ");
42
42
 
43
- for (char *p = strtok(str," "); p; p = strtok(NULL, " "))
43
+ for (; p; p = strtok(NULL, " "))
44
44
 
45
- if (!(ans = strncmp(p, word, len))) break;
45
+ if (!strncmp(p, word, len)) break;
46
46
 
47
- puts(ans ? "その英単語は、英文に含まれていません。"
47
+ puts(p ? "その英単語は、英文に含まれていま。"
48
48
 
49
- : "その英単語は、英文に含まれていま。");
49
+ : "その英単語は、英文に含まれていません。");
50
50
 
51
51
  }
52
52
 

1

コードを追加

2021/05/22 16:17

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -5,3 +5,49 @@
5
5
  ans だけでなく、str_len、word_len、n、in_str、in_word、large_str、
6
6
 
7
7
  large_word、p、w を表示して何が入っているか見てください。
8
+
9
+
10
+
11
+ **追記**
12
+
13
+ ```C
14
+
15
+ #include <stdio.h> // scanf, printf, puts
16
+
17
+ #include <string.h> // strlen, strncmp, strtok
18
+
19
+ #include <ctype.h> // toupper
20
+
21
+
22
+
23
+ int main(void)
24
+
25
+ {
26
+
27
+ char str[50], word[15];
28
+
29
+
30
+
31
+ printf(">>"), scanf("%[^\n]", str);
32
+
33
+ printf(">>"), scanf(" %[^\n]", word);
34
+
35
+ for (int i = 0; str[i]; i++) str[i] = toupper(str[i]);
36
+
37
+ int len = strlen(word);
38
+
39
+ for (int i = 0; i < len; i++) word[i] = toupper(word[i]);
40
+
41
+ int ans = 1;
42
+
43
+ for (char *p = strtok(str," "); p; p = strtok(NULL, " "))
44
+
45
+ if (!(ans = strncmp(p, word, len))) break;
46
+
47
+ puts(ans ? "その英単語は、英文に含まれていません。"
48
+
49
+ : "その英単語は、英文に含まれています。");
50
+
51
+ }
52
+
53
+ ```