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

回答編集履歴

1

追記

2020/07/02 01:47

投稿

episteme
episteme

スコア16612

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
  ```