回答編集履歴
2
コードの修正
answer
CHANGED
@@ -13,7 +13,7 @@
|
|
13
13
|
i += n;
|
14
14
|
if (sscanf(text + i, "%255[a-zA-Z]%n", str, &n) != 1) break;
|
15
15
|
i += n;
|
16
|
-
|
16
|
+
printf("[%s]\n", str);
|
17
17
|
}
|
18
18
|
}
|
19
19
|
```
|
@@ -26,14 +26,19 @@
|
|
26
26
|
|
27
27
|
int main(void)
|
28
28
|
{
|
29
|
-
char text[] = "It is good to see you. Thank you for coming
|
29
|
+
char text[] = "It is good to see you. Thank you for coming";
|
30
|
+
unsigned char c;
|
30
|
-
|
31
|
+
int n = 0, i = 0, j = 0;
|
31
|
-
for (
|
32
|
+
for (; c = text[i]; i++)
|
32
|
-
|
33
|
+
if (isalpha(c)) !n && (n = 1, j = i);
|
33
|
-
|
34
|
+
else if (n) n = !printf("[%.*s]\n", i - j, text + j);
|
34
|
-
|
35
|
+
if (n) printf("[%.*s]\n", i - j, text + j);
|
35
36
|
}
|
36
37
|
```
|
37
38
|
isalpha(c) の c は EOF 以外の負の値であってはならないので
|
38
39
|
unsigned char c; にしています。
|
39
|
-
n は、単語を表示しているので後で改行が必要ですというフラグです。
|
40
|
+
n は、単語を表示しているので後で改行が必要ですというフラグです。
|
41
|
+
### 追記
|
42
|
+
> 出力する単語は一行に一単語ずつ '['と']' で囲んで出力する
|
43
|
+
|
44
|
+
この条件を満たしていなかったのでコードを修正しました。
|
1
別解の追加
answer
CHANGED
@@ -16,4 +16,24 @@
|
|
16
16
|
puts(str);
|
17
17
|
}
|
18
18
|
}
|
19
|
-
```
|
19
|
+
```
|
20
|
+
### 別解
|
21
|
+
やっぱり、sscanf は文字列を分割する関数になるかもしれないので、
|
22
|
+
別のやり方にします。
|
23
|
+
```C
|
24
|
+
#include <stdio.h>
|
25
|
+
#include <ctype.h>
|
26
|
+
|
27
|
+
int main(void)
|
28
|
+
{
|
29
|
+
char text[] = "It is good to see you. Thank you for coming.";
|
30
|
+
unsigned char c, n = 0; // n: newline flag
|
31
|
+
for (int i = 0; c = text[i]; i++)
|
32
|
+
if (isalpha(c)) n = putchar(c);
|
33
|
+
else if (n) n = !putchar('\n');
|
34
|
+
if (n) putchar('\n');
|
35
|
+
}
|
36
|
+
```
|
37
|
+
isalpha(c) の c は EOF 以外の負の値であってはならないので
|
38
|
+
unsigned char c; にしています。
|
39
|
+
n は、単語を表示しているので後で改行が必要ですというフラグです。
|