回答編集履歴
1
追記
answer
CHANGED
@@ -23,4 +23,36 @@
|
|
23
23
|
printf("\n");
|
24
24
|
return 0;
|
25
25
|
}
|
26
|
+
```
|
27
|
+
[追記] 少なからず小賢しい修正。第二引数:tokensにNULLを渡せば分割数が返ってくるので...:
|
28
|
+
```C
|
29
|
+
#include <stdio.h>
|
30
|
+
#include <stdlib.h>
|
31
|
+
#include <string.h>
|
32
|
+
|
33
|
+
int split(char* str, char* tokens[], const char* delim) {
|
34
|
+
char* last = str + strlen(str);
|
35
|
+
int count = 0;
|
36
|
+
for ( char* token = strtok(str, delim); token; token = strtok(NULL, delim)) {
|
37
|
+
if ( tokens ) { tokens[count] = token; }
|
38
|
+
else { token[strlen(token)] = *delim; *last = '\0'; }
|
39
|
+
++count;
|
40
|
+
}
|
41
|
+
return count;
|
42
|
+
}
|
43
|
+
|
44
|
+
int main() {
|
45
|
+
char input[] = "きょうは,とても,いい天気";
|
46
|
+
char** tokens;
|
47
|
+
int n = split(input, NULL, ","); // token数を求め
|
48
|
+
tokens = malloc(sizeof(char*)*n); // そんだけの領域を確保して
|
49
|
+
split(input, tokens, ","); // もっかい呼ぶ
|
50
|
+
int i;
|
51
|
+
for ( i = 0; i < n; ++i ) {
|
52
|
+
printf("[%s] ", tokens[i]);
|
53
|
+
}
|
54
|
+
printf("\n");
|
55
|
+
free(tokens);
|
56
|
+
return 0;
|
57
|
+
}
|
26
58
|
```
|