回答編集履歴

1

追記

2021/12/11 14:45

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -39,3 +39,91 @@
39
39
  これが理解できないと先へは進めません。
40
40
 
41
41
  最初の文字が同じものの中で何番目かを求める以前の問題です。
42
+
43
+
44
+
45
+ **追記**
46
+
47
+ strtok が理解できなくても先に進むことはできます。
48
+
49
+ ',' を区切り文字として単語に分割するだけなので、
50
+
51
+ 文字列を先頭から順に見ていけばよいのです。
52
+
53
+ ```C
54
+
55
+ #include <stdio.h> // puts
56
+
57
+
58
+
59
+ int main(void)
60
+
61
+ {
62
+
63
+ char str[] = "hello,my,new,classmate,class,heep,help";
64
+
65
+ char *word[100];
66
+
67
+ int n = 0;
68
+
69
+
70
+
71
+ word[n++] = str;
72
+
73
+ for (int i = 0; str[i]; i++)
74
+
75
+ if (str[i] == ',') {
76
+
77
+ str[i] = '\0';
78
+
79
+ if (n == 100) { puts("too many words"); return 1; }
80
+
81
+ word[n++] = &str[i+1];
82
+
83
+ }
84
+
85
+ for (int i = 0; i < n; i++) puts(word[i]);
86
+
87
+ }
88
+
89
+ ```
90
+
91
+ この配列 word をソートした後に、文字列を検索すればよいのです。
92
+
93
+ ```C
94
+
95
+ #include <stdio.h> // scanf
96
+
97
+ #include <string.h> // strcmp
98
+
99
+
100
+
101
+ int main(void)
102
+
103
+ {
104
+
105
+ char *word[] = { "class", "classmate", "heep", "hello", "help", "my", "new" };
106
+
107
+ int n = sizeof(word)/sizeof(word[0]), i, j;
108
+
109
+ char str[100];
110
+
111
+ while (scanf("%99s", str) == 1) {
112
+
113
+ for (i = 0; i < n && strcmp(word[i], str); i++) ;
114
+
115
+ if (i == n) puts("NOT FOUND");
116
+
117
+ else {
118
+
119
+ for (j = i; --j >= 0 && word[j][0] == word[i][0]; ) ;
120
+
121
+ printf("%c %d\n", word[i][0], i - j);
122
+
123
+ }
124
+
125
+ }
126
+
127
+ }
128
+
129
+ ```