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

回答編集履歴

4

ソース修正

2019/07/06 19:45

投稿

cateye
cateye

スコア6851

answer CHANGED
@@ -16,9 +16,13 @@
16
16
  int index = 0;
17
17
  while (*cptr) {
18
18
  // 英字以外をスキップ
19
- while (!isalpha(*cptr)) {
19
+ while (!isalpha(*cptr) && *cptr) {
20
20
  cptr++;
21
21
  }
22
+ // 終端の時は終了
23
+ if (*cptr == '\0') {
24
+ break;
25
+ }
22
26
  // 英字だけをコピー
23
27
  char *dptr = buf[index];
24
28
  while (isalpha(*cptr)) {
@@ -28,7 +32,6 @@
28
32
  index++;
29
33
  }
30
34
  //
31
- index--; // 行き過ぎた分を戻す
32
35
  for (int i = 0; i < index; i++) {
33
36
  printf("str[%d] : [%s]\n", i, buf[i]);
34
37
  }

3

ソース修正

2019/07/06 19:45

投稿

cateye
cateye

スコア6851

answer CHANGED
@@ -30,7 +30,7 @@
30
30
  //
31
31
  index--; // 行き過ぎた分を戻す
32
32
  for (int i = 0; i < index; i++) {
33
- puts(buf[i]);
33
+ printf("str[%d] : [%s]\n", i, buf[i]);
34
34
  }
35
35
  //
36
36
  return 0;
@@ -38,18 +38,16 @@
38
38
  ```
39
39
  実行結果
40
40
  ```text
41
- usr ~/Project/test % cc c6.c
42
41
  usr ~/Project/test % ./a.out
43
- It
42
+ str[0] : [It]
44
- is
43
+ str[1] : [is]
45
- good
44
+ str[2] : [good]
46
- to
45
+ str[3] : [to]
47
- see
46
+ str[4] : [see]
48
- you
47
+ str[5] : [you]
49
- Thank
48
+ str[6] : [Thank]
50
- you
49
+ str[7] : [you]
51
- for
50
+ str[8] : [for]
52
- coming
51
+ str[9] : [coming]
53
52
  usr ~/Project/test %
54
-
55
53
  ```

2

誤記修正

2019/07/06 13:49

投稿

cateye
cateye

スコア6851

answer CHANGED
@@ -15,7 +15,7 @@
15
15
  char buf[128][32]; // 数字は適当
16
16
  int index = 0;
17
17
  while (*cptr) {
18
- // 空白をスキップ
18
+ // 英字以外をスキップ
19
19
  while (!isalpha(*cptr)) {
20
20
  cptr++;
21
21
  }

1

ソース追記

2019/07/06 10:37

投稿

cateye
cateye

スコア6851

answer CHANGED
@@ -1,3 +1,55 @@
1
1
  時間がないのでヒントだけ。
2
2
  単語を判定するには、ctype.hをincludeしてisalnumで判断しましょう。
3
- [ctype.h](http://www.c-tipsref.com/reference/ctype.html)
3
+ [ctype.h](http://www.c-tipsref.com/reference/ctype.html)
4
+ 「追記」・・・遅くなりましたがw
5
+ ```c
6
+ #include <stdio.h>
7
+ #include <ctype.h>
8
+
9
+ int main(void)
10
+ {
11
+ const char text[] = "It is good to see you. Thank you for coming.";
12
+ //
13
+ const char *cptr = text;
14
+ //
15
+ char buf[128][32]; // 数字は適当
16
+ int index = 0;
17
+ while (*cptr) {
18
+ // 空白をスキップ
19
+ while (!isalpha(*cptr)) {
20
+ cptr++;
21
+ }
22
+ // 英字だけをコピー
23
+ char *dptr = buf[index];
24
+ while (isalpha(*cptr)) {
25
+ *dptr++ = *cptr++;
26
+ }
27
+ *dptr = '\0'; // 行末
28
+ index++;
29
+ }
30
+ //
31
+ index--; // 行き過ぎた分を戻す
32
+ for (int i = 0; i < index; i++) {
33
+ puts(buf[i]);
34
+ }
35
+ //
36
+ return 0;
37
+ }
38
+ ```
39
+ 実行結果
40
+ ```text
41
+ usr ~/Project/test % cc c6.c
42
+ usr ~/Project/test % ./a.out
43
+ It
44
+ is
45
+ good
46
+ to
47
+ see
48
+ you
49
+ Thank
50
+ you
51
+ for
52
+ coming
53
+ usr ~/Project/test %
54
+
55
+ ```