質問編集履歴

4

間違いの訂正

2020/09/02 14:17

投稿

Merrifield
Merrifield

スコア31

test CHANGED
File without changes
test CHANGED
@@ -282,6 +282,16 @@
282
282
 
283
283
  ```
284
284
 
285
- まだ、"Bangkok"が`b:*,a:*,n:*,g:*,k:**,o:*`.となるところ
286
-
287
- `b:*,a:*,n:*,g:*,k:**,o:*,` となります
285
+ 文字列によって成功するようになりましたが、まだ問題があるようです。
286
+
287
+ メッセージは
288
+
289
+ ```ここに言語を入力
290
+
291
+ string_literal("Bangkok") should return "b:*,a:*,n:*,g:*,k:**,o:*", actual: "b:*,a:*,n:*,g:*,k:**,o:*,\""
292
+
293
+
294
+
295
+ string_literal("Dhaka") should return "d:*,h:*,a:**,k:*", actual: "d:*,h:*,a:**,k:*,"
296
+
297
+ ```

3

間違いの訂正

2020/09/02 14:17

投稿

Merrifield
Merrifield

スコア31

test CHANGED
File without changes
test CHANGED
@@ -252,7 +252,7 @@
252
252
 
253
253
 
254
254
 
255
- if(i != (n -1))
255
+ if(i != (n -1)) //この部分が問題?
256
256
 
257
257
  {
258
258
 
@@ -282,4 +282,6 @@
282
282
 
283
283
  ```
284
284
 
285
- まだ、"Bangkok"がb:*,a:*,n:*,g:*,k:**,o:*となりますね。どがおかしいでしょうか。
285
+ まだ、"Bangkok"が`b:*,a:*,n:*,g:*,k:**,o:*`.となると
286
+
287
+ `b:*,a:*,n:*,g:*,k:**,o:*,` となりますね。

2

間違いの訂正

2020/09/02 14:11

投稿

Merrifield
Merrifield

スコア31

test CHANGED
File without changes
test CHANGED
@@ -206,7 +206,7 @@
206
206
 
207
207
  {
208
208
 
209
- if(city[i] == city[j])count++;
209
+ if(tolower(city[i]) == tolower(city[j]))count++;
210
210
 
211
211
 
212
212
 
@@ -216,21 +216,21 @@
216
216
 
217
217
 
218
218
 
219
- if(i > 0)
219
+ if(i > 0)
220
-
220
+
221
- {
221
+ {
222
-
222
+
223
- for(int b = i - 1; b == 0; b--)
223
+ for(int b = i - 1; b >= 0; b--)
224
-
224
+
225
- {
225
+ {
226
-
226
+
227
- if(city[i] == city[b])count2++;
227
+ if(tolower(city[i]) == tolower(city[b]))count2++;
228
228
 
229
229
  }
230
230
 
231
231
  }
232
232
 
233
- if(count2 != 0)continue;   //同じ文字が前にあればfor文の最初にもどっているつもり
233
+ if(count2 != 0)continue;
234
234
 
235
235
 
236
236
 
@@ -242,7 +242,7 @@
242
242
 
243
243
 
244
244
 
245
- for(int a = 1; a <= count; a++)//count(同じ文字があった回数)の数だけ*をつけているつもり
245
+ for(int a = 1; a <= count; a++)
246
246
 
247
247
  {
248
248
 
@@ -282,4 +282,4 @@
282
282
 
283
283
  ```
284
284
 
285
- まだ、("Chicago")`c:*,h:*,i:*,c:*,a:*,g:*,o:*`となりますね。どこがおかしいでしょうか。
285
+ まだ、"Bangkok"がb:*,a:*,n:*,g:*,k:**,o:*となりますね。どこがおかしいでしょうか。

1

間違いの訂正

2020/09/02 14:06

投稿

Merrifield
Merrifield

スコア31

test CHANGED
File without changes
test CHANGED
@@ -155,3 +155,131 @@
155
155
  }
156
156
 
157
157
  ```
158
+
159
+
160
+
161
+ 回答いただいたものを参考にして、少し修正してみました。
162
+
163
+ ```c
164
+
165
+ #include <string.h>
166
+
167
+ #include <stdlib.h> //malloc
168
+
169
+ #include <ctype.h> // tolower
170
+
171
+
172
+
173
+ char* get_strings(const char *city)
174
+
175
+ {
176
+
177
+ int i, j, n;
178
+
179
+ n = strlen(city);
180
+
181
+ char *string;
182
+
183
+ string = malloc( n * 4 + 1);
184
+
185
+ char *base = string;
186
+
187
+
188
+
189
+ for(i = 0; i < n; i++ )
190
+
191
+ {
192
+
193
+ int c = tolower((unsigned char)city[i]);
194
+
195
+ if (!isalpha(c)) continue;
196
+
197
+
198
+
199
+ int count = 0;
200
+
201
+ int count2 = 0;
202
+
203
+
204
+
205
+ for(j = 0; j < n; j++)
206
+
207
+ {
208
+
209
+ if(city[i] == city[j])count++;
210
+
211
+
212
+
213
+ }
214
+
215
+
216
+
217
+
218
+
219
+ if(i > 0)
220
+
221
+ {
222
+
223
+ for(int b = i - 1; b == 0; b--)
224
+
225
+ {
226
+
227
+ if(city[i] == city[b])count2++;
228
+
229
+ }
230
+
231
+ }
232
+
233
+ if(count2 != 0)continue;   //同じ文字が前にあればfor文の最初にもどっているつもり
234
+
235
+
236
+
237
+ *string++ = tolower(city[i]);
238
+
239
+ *string++ = ':';
240
+
241
+
242
+
243
+
244
+
245
+ for(int a = 1; a <= count; a++)//count(同じ文字があった回数)の数だけ*をつけているつもり
246
+
247
+ {
248
+
249
+ *string++ ='*';
250
+
251
+ }
252
+
253
+
254
+
255
+ if(i != (n -1))
256
+
257
+ {
258
+
259
+ *string++ = ',';
260
+
261
+ }
262
+
263
+ else
264
+
265
+ {
266
+
267
+ *string = '\0';
268
+
269
+ }
270
+
271
+
272
+
273
+
274
+
275
+ }
276
+
277
+
278
+
279
+ return base;
280
+
281
+ }
282
+
283
+ ```
284
+
285
+ まだ、("Chicago")が`c:*,h:*,i:*,c:*,a:*,g:*,o:*`となりますね。どこがおかしいでしょうか。