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

回答編集履歴

3

再修正

2018/05/08 13:12

投稿

cateye
cateye

スコア6851

answer CHANGED
@@ -16,10 +16,6 @@
16
16
  if( *str == '\0' ){
17
17
  return NULL;
18
18
  }
19
- if( *str == delimiter ){
20
- *destination= '\0';
21
- return ++str;
22
- }
23
19
  while( *str != delimiter && *str != '\0' ){
24
20
  *destination++ = *str++;
25
21
  }

2

ソース修正

2018/05/08 13:11

投稿

cateye
cateye

スコア6851

answer CHANGED
@@ -1,8 +1,13 @@
1
- 題意にはそぐわないと思いますが・・・
1
+ 題意にはそぐわないと思いますが・・・ヒントになれば
2
- dodox86さんのおっしゃる通り「区切り文字が連続している場合」は正常(?)に動作しません^^;
3
2
  また、終端('\0')が見つかっても再度separate()を呼び出します・・・改良の余地あり・・・
4
3
 
5
4
  ```c
5
+ usr~/test % ./a.out
6
+ abc
7
+ xyz
8
+
9
+
10
+ 012
6
11
  usr~/test % cat separate.c
7
12
  #include <stdio.h>
8
13
  //
@@ -11,15 +16,21 @@
11
16
  if( *str == '\0' ){
12
17
  return NULL;
13
18
  }
19
+ if( *str == delimiter ){
20
+ *destination= '\0';
21
+ return ++str;
22
+ }
14
23
  while( *str != delimiter && *str != '\0' ){
15
24
  *destination++ = *str++;
16
25
  }
26
+ *destination= '\0';
27
+
17
28
  return *str != '\0' ? ++str: str;
18
29
  }
19
30
 
20
31
  int main()
21
32
  {
22
- char str[]="abc,xyz,012";
33
+ char str[]="abc,xyz,,,012";
23
34
  char buf[10];
24
35
  const char *pos= str;
25
36
  //
@@ -29,9 +40,5 @@
29
40
  //
30
41
  return 0;
31
42
  }
32
- usr~/test % ./separate
33
- abc
34
- xyz
35
- 012
36
43
  usr~/test %
37
44
  ```

1

追記

2018/05/08 13:08

投稿

cateye
cateye

スコア6851

answer CHANGED
@@ -1,3 +1,4 @@
1
+ 題意にはそぐわないと思いますが・・・
1
2
  dodox86さんのおっしゃる通り「区切り文字が連続している場合」は正常(?)に動作しません^^;
2
3
  また、終端('\0')が見つかっても再度separate()を呼び出します・・・改良の余地あり・・・
3
4