回答編集履歴
2
ポインタ版改良(?)
test
CHANGED
@@ -52,8 +52,6 @@
|
|
52
52
|
|
53
53
|
#include <stdio.h>
|
54
54
|
|
55
|
-
#include <string.h>
|
56
|
-
|
57
55
|
|
58
56
|
|
59
57
|
int main(void) {
|
@@ -78,11 +76,11 @@
|
|
78
76
|
|
79
77
|
for(int i=0; i<n; i++) {
|
80
78
|
|
81
|
-
if(i > 0)
|
79
|
+
if(i > 0) *p++ = '_'; //2つめ以降の前に "_" を付ける
|
82
80
|
|
83
81
|
fgets(p, endp-p, stdin);
|
84
82
|
|
85
|
-
p
|
83
|
+
while(*p != '\n') p++; //改行まで移動
|
86
84
|
|
87
85
|
*p = '\0'; //改行を消す
|
88
86
|
|
1
説明修正, ポインタによるコードを追加
test
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
ポインタを扱えれば, str 内で直接編集していくようにも出来ます.
|
1
|
+
~~ポインタを扱えれば,~~ str 内で直接編集していくようにも出来ます.
|
2
2
|
|
3
3
|
```c
|
4
4
|
|
@@ -43,3 +43,57 @@
|
|
43
43
|
}
|
44
44
|
|
45
45
|
```
|
46
|
+
|
47
|
+
すいません, 正確には上のコードは配列でした.
|
48
|
+
|
49
|
+
ポインタだと以下の感じですね.
|
50
|
+
|
51
|
+
```c
|
52
|
+
|
53
|
+
#include <stdio.h>
|
54
|
+
|
55
|
+
#include <string.h>
|
56
|
+
|
57
|
+
|
58
|
+
|
59
|
+
int main(void) {
|
60
|
+
|
61
|
+
char str[1000];
|
62
|
+
|
63
|
+
int n;
|
64
|
+
|
65
|
+
|
66
|
+
|
67
|
+
fgets(str, sizeof(str), stdin);
|
68
|
+
|
69
|
+
sscanf(str, "%d", &n);
|
70
|
+
|
71
|
+
|
72
|
+
|
73
|
+
char *p = str;
|
74
|
+
|
75
|
+
char *endp = str + sizeof(str);
|
76
|
+
|
77
|
+
*p = '\0'; // str を空にする
|
78
|
+
|
79
|
+
for(int i=0; i<n; i++) {
|
80
|
+
|
81
|
+
if(i > 0) { *p++='_'; *p='\0'; } //2つめ以降の前に "_" を付ける
|
82
|
+
|
83
|
+
fgets(p, endp-p, stdin);
|
84
|
+
|
85
|
+
p += strlen(p) - 1; //-1 は改行分
|
86
|
+
|
87
|
+
*p = '\0'; //改行を消す
|
88
|
+
|
89
|
+
}
|
90
|
+
|
91
|
+
|
92
|
+
|
93
|
+
printf(str);
|
94
|
+
|
95
|
+
return 0;
|
96
|
+
|
97
|
+
}
|
98
|
+
|
99
|
+
```
|