回答編集履歴

4

ソース修正

2019/07/06 19:45

投稿

cateye
cateye

スコア6851

test CHANGED
@@ -34,9 +34,17 @@
34
34
 
35
35
  // 英字以外をスキップ
36
36
 
37
- while (!isalpha(*cptr)) {
37
+ while (!isalpha(*cptr) && *cptr) {
38
38
 
39
39
  cptr++;
40
+
41
+ }
42
+
43
+ // 終端の時は終了
44
+
45
+ if (*cptr == '\0') {
46
+
47
+ break;
40
48
 
41
49
  }
42
50
 
@@ -57,8 +65,6 @@
57
65
  }
58
66
 
59
67
  //
60
-
61
- index--; // 行き過ぎた分を戻す
62
68
 
63
69
  for (int i = 0; i < index; i++) {
64
70
 

3

ソース修正

2019/07/06 19:45

投稿

cateye
cateye

スコア6851

test CHANGED
@@ -62,7 +62,7 @@
62
62
 
63
63
  for (int i = 0; i < index; i++) {
64
64
 
65
- puts(buf[i]);
65
+ printf("str[%d] : [%s]\n", i, buf[i]);
66
66
 
67
67
  }
68
68
 
@@ -78,32 +78,28 @@
78
78
 
79
79
  ```text
80
80
 
81
- usr ~/Project/test % cc c6.c
82
-
83
81
  usr ~/Project/test % ./a.out
84
82
 
85
- It
83
+ str[0] : [It]
86
84
 
87
- is
85
+ str[1] : [is]
88
86
 
89
- good
87
+ str[2] : [good]
90
88
 
91
- to
89
+ str[3] : [to]
92
90
 
93
- see
91
+ str[4] : [see]
94
92
 
95
- you
93
+ str[5] : [you]
96
94
 
97
- Thank
95
+ str[6] : [Thank]
98
96
 
99
- you
97
+ str[7] : [you]
100
98
 
101
- for
99
+ str[8] : [for]
102
100
 
103
- coming
101
+ str[9] : [coming]
104
102
 
105
103
  usr ~/Project/test %
106
104
 
107
-
108
-
109
105
  ```

2

誤記修正

2019/07/06 13:49

投稿

cateye
cateye

スコア6851

test CHANGED
@@ -32,7 +32,7 @@
32
32
 
33
33
  while (*cptr) {
34
34
 
35
- // 空白をスキップ
35
+ // 英字以外をスキップ
36
36
 
37
37
  while (!isalpha(*cptr)) {
38
38
 

1

ソース追記

2019/07/06 10:37

投稿

cateye
cateye

スコア6851

test CHANGED
@@ -3,3 +3,107 @@
3
3
  単語を判定するには、ctype.hをincludeしてisalnumで判断しましょう。
4
4
 
5
5
  [ctype.h](http://www.c-tipsref.com/reference/ctype.html)
6
+
7
+ 「追記」・・・遅くなりましたがw
8
+
9
+ ```c
10
+
11
+ #include <stdio.h>
12
+
13
+ #include <ctype.h>
14
+
15
+
16
+
17
+ int main(void)
18
+
19
+ {
20
+
21
+ const char text[] = "It is good to see you. Thank you for coming.";
22
+
23
+ //
24
+
25
+ const char *cptr = text;
26
+
27
+ //
28
+
29
+ char buf[128][32]; // 数字は適当
30
+
31
+ int index = 0;
32
+
33
+ while (*cptr) {
34
+
35
+ // 空白をスキップ
36
+
37
+ while (!isalpha(*cptr)) {
38
+
39
+ cptr++;
40
+
41
+ }
42
+
43
+ // 英字だけをコピー
44
+
45
+ char *dptr = buf[index];
46
+
47
+ while (isalpha(*cptr)) {
48
+
49
+ *dptr++ = *cptr++;
50
+
51
+ }
52
+
53
+ *dptr = '\0'; // 行末
54
+
55
+ index++;
56
+
57
+ }
58
+
59
+ //
60
+
61
+ index--; // 行き過ぎた分を戻す
62
+
63
+ for (int i = 0; i < index; i++) {
64
+
65
+ puts(buf[i]);
66
+
67
+ }
68
+
69
+ //
70
+
71
+ return 0;
72
+
73
+ }
74
+
75
+ ```
76
+
77
+ 実行結果
78
+
79
+ ```text
80
+
81
+ usr ~/Project/test % cc c6.c
82
+
83
+ usr ~/Project/test % ./a.out
84
+
85
+ It
86
+
87
+ is
88
+
89
+ good
90
+
91
+ to
92
+
93
+ see
94
+
95
+ you
96
+
97
+ Thank
98
+
99
+ you
100
+
101
+ for
102
+
103
+ coming
104
+
105
+ usr ~/Project/test %
106
+
107
+
108
+
109
+ ```