teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

4

間違いの訂正

2020/09/02 14:17

投稿

Merrifield
Merrifield

スコア31

title CHANGED
File without changes
body CHANGED
@@ -140,5 +140,10 @@
140
140
  return base;
141
141
  }
142
142
  ```
143
- まだ、"Bangkok"が`b:*,a:*,n:*,g:*,k:**,o:*`.となるところ
144
- `b:*,a:*,n:*,g:*,k:**,o:*,` となります
143
+ 文字列によって成功するようになりましたが、まだ問題があるようです。
144
+ メッセージは
145
+ ```ここに言語を入力
146
+ string_literal("Bangkok") should return "b:*,a:*,n:*,g:*,k:**,o:*", actual: "b:*,a:*,n:*,g:*,k:**,o:*,\""
147
+
148
+ string_literal("Dhaka") should return "d:*,h:*,a:**,k:*", actual: "d:*,h:*,a:**,k:*,"
149
+ ```

3

間違いの訂正

2020/09/02 14:17

投稿

Merrifield
Merrifield

スコア31

title CHANGED
File without changes
body CHANGED
@@ -125,7 +125,7 @@
125
125
  *string++ ='*';
126
126
  }
127
127
 
128
- if(i != (n -1))
128
+ if(i != (n -1)) //この部分が問題?
129
129
  {
130
130
  *string++ = ',';
131
131
  }
@@ -140,4 +140,5 @@
140
140
  return base;
141
141
  }
142
142
  ```
143
- まだ、"Bangkok"がb:*,a:*,n:*,g:*,k:**,o:*となりますね。どがおかしいでしょうか。
143
+ まだ、"Bangkok"が`b:*,a:*,n:*,g:*,k:**,o:*`.となると
144
+ `b:*,a:*,n:*,g:*,k:**,o:*,` となりますね。

2

間違いの訂正

2020/09/02 14:11

投稿

Merrifield
Merrifield

スコア31

title CHANGED
File without changes
body CHANGED
@@ -102,25 +102,25 @@
102
102
 
103
103
  for(j = 0; j < n; j++)
104
104
  {
105
- if(city[i] == city[j])count++;
105
+ if(tolower(city[i]) == tolower(city[j]))count++;
106
106
 
107
107
  }
108
108
 
109
109
 
110
- if(i > 0)
110
+ if(i > 0)
111
111
  {
112
- for(int b = i - 1; b == 0; b--)
112
+ for(int b = i - 1; b >= 0; b--)
113
113
  {
114
- if(city[i] == city[b])count2++;
114
+ if(tolower(city[i]) == tolower(city[b]))count2++;
115
115
  }
116
116
  }
117
- if(count2 != 0)continue;   //同じ文字が前にあればfor文の最初にもどっているつもり
117
+ if(count2 != 0)continue;
118
118
 
119
119
  *string++ = tolower(city[i]);
120
120
  *string++ = ':';
121
121
 
122
122
 
123
- for(int a = 1; a <= count; a++)//count(同じ文字があった回数)の数だけ*をつけているつもり
123
+ for(int a = 1; a <= count; a++)
124
124
  {
125
125
  *string++ ='*';
126
126
  }
@@ -140,4 +140,4 @@
140
140
  return base;
141
141
  }
142
142
  ```
143
- まだ、("Chicago")`c:*,h:*,i:*,c:*,a:*,g:*,o:*`となりますね。どこがおかしいでしょうか。
143
+ まだ、"Bangkok"がb:*,a:*,n:*,g:*,k:**,o:*となりますね。どこがおかしいでしょうか。

1

間違いの訂正

2020/09/02 14:06

投稿

Merrifield
Merrifield

スコア31

title CHANGED
File without changes
body CHANGED
@@ -76,4 +76,68 @@
76
76
 
77
77
  return base;
78
78
  }
79
- ```
79
+ ```
80
+
81
+ 回答いただいたものを参考にして、少し修正してみました。
82
+ ```c
83
+ #include <string.h>
84
+ #include <stdlib.h> //malloc
85
+ #include <ctype.h> // tolower
86
+
87
+ char* get_strings(const char *city)
88
+ {
89
+ int i, j, n;
90
+ n = strlen(city);
91
+ char *string;
92
+ string = malloc( n * 4 + 1);
93
+ char *base = string;
94
+
95
+ for(i = 0; i < n; i++ )
96
+ {
97
+ int c = tolower((unsigned char)city[i]);
98
+ if (!isalpha(c)) continue;
99
+
100
+ int count = 0;
101
+ int count2 = 0;
102
+
103
+ for(j = 0; j < n; j++)
104
+ {
105
+ if(city[i] == city[j])count++;
106
+
107
+ }
108
+
109
+
110
+ if(i > 0)
111
+ {
112
+ for(int b = i - 1; b == 0; b--)
113
+ {
114
+ if(city[i] == city[b])count2++;
115
+ }
116
+ }
117
+ if(count2 != 0)continue;   //同じ文字が前にあればfor文の最初にもどっているつもり
118
+
119
+ *string++ = tolower(city[i]);
120
+ *string++ = ':';
121
+
122
+
123
+ for(int a = 1; a <= count; a++)//count(同じ文字があった回数)の数だけ*をつけているつもり
124
+ {
125
+ *string++ ='*';
126
+ }
127
+
128
+ if(i != (n -1))
129
+ {
130
+ *string++ = ',';
131
+ }
132
+ else
133
+ {
134
+ *string = '\0';
135
+ }
136
+
137
+
138
+ }
139
+
140
+ return base;
141
+ }
142
+ ```
143
+ まだ、("Chicago")が`c:*,h:*,i:*,c:*,a:*,g:*,o:*`となりますね。どこがおかしいでしょうか。