回答編集履歴

2

コードの修正

2019/07/06 01:25

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -28,7 +28,7 @@
28
28
 
29
29
  i += n;
30
30
 
31
- puts(str);
31
+ printf("[%s]\n", str);
32
32
 
33
33
  }
34
34
 
@@ -54,17 +54,19 @@
54
54
 
55
55
  {
56
56
 
57
- char text[] = "It is good to see you. Thank you for coming.";
57
+ char text[] = "It is good to see you. Thank you for coming";
58
58
 
59
- unsigned char c, n = 0; // n: newline flag
59
+ unsigned char c;
60
60
 
61
- for (int i = 0; c = text[i]; i++)
61
+ int n = 0, i = 0, j = 0;
62
62
 
63
- if (isalpha(c)) n = putchar(c);
63
+ for (; c = text[i]; i++)
64
64
 
65
- else if (n) n = !putchar('\n');
65
+ if (isalpha(c)) !n && (n = 1, j = i);
66
66
 
67
+ else if (n) n = !printf("[%.*s]\n", i - j, text + j);
68
+
67
- if (n) putchar('\n');
69
+ if (n) printf("[%.*s]\n", i - j, text + j);
68
70
 
69
71
  }
70
72
 
@@ -75,3 +77,11 @@
75
77
  unsigned char c; にしています。
76
78
 
77
79
  n は、単語を表示しているので後で改行が必要ですというフラグです。
80
+
81
+ ### 追記
82
+
83
+ > 出力する単語は一行に一単語ずつ '['と']' で囲んで出力する
84
+
85
+
86
+
87
+ この条件を満たしていなかったのでコードを修正しました。

1

別解の追加

2019/07/06 01:25

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -35,3 +35,43 @@
35
35
  }
36
36
 
37
37
  ```
38
+
39
+ ### 別解
40
+
41
+ やっぱり、sscanf は文字列を分割する関数になるかもしれないので、
42
+
43
+ 別のやり方にします。
44
+
45
+ ```C
46
+
47
+ #include <stdio.h>
48
+
49
+ #include <ctype.h>
50
+
51
+
52
+
53
+ int main(void)
54
+
55
+ {
56
+
57
+ char text[] = "It is good to see you. Thank you for coming.";
58
+
59
+ unsigned char c, n = 0; // n: newline flag
60
+
61
+ for (int i = 0; c = text[i]; i++)
62
+
63
+ if (isalpha(c)) n = putchar(c);
64
+
65
+ else if (n) n = !putchar('\n');
66
+
67
+ if (n) putchar('\n');
68
+
69
+ }
70
+
71
+ ```
72
+
73
+ isalpha(c) の c は EOF 以外の負の値であってはならないので
74
+
75
+ unsigned char c; にしています。
76
+
77
+ n は、単語を表示しているので後で改行が必要ですというフラグです。