回答編集履歴

2

入力文字列の最後が「,」の場合のバグを修正

2020/06/30 09:40

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -107,3 +107,69 @@
107
107
  int main() { generate(0); }
108
108
 
109
109
  ```
110
+
111
+ **追記2**
112
+
113
+ 最初のコードは、`A,B,C,` のように最後が `,` の場合を
114
+
115
+ 入力謝りにしていなかったので、次のように訂正します。
116
+
117
+ ```C++
118
+
119
+ #include <iostream>
120
+
121
+ #include <sstream> // istringstream
122
+
123
+ using namespace std;
124
+
125
+
126
+
127
+ const int n = 3; // n <= 26. 3 for A,B,C. 5 for A,B,C,D,E.
128
+
129
+
130
+
131
+ bool check(const char *s)
132
+
133
+ {
134
+
135
+ istringstream iss(s);
136
+
137
+ int cnt[26] = { 0 };
138
+
139
+ char c;
140
+
141
+ while (iss >> c && c >= 'A' && c < 'A'+n && !cnt[c-'A']++) {
142
+
143
+ if (!(iss >> c)) return true;
144
+
145
+ if (c != ',') break;
146
+
147
+ }
148
+
149
+ return false;
150
+
151
+ }
152
+
153
+
154
+
155
+ int main(int argc, char* argv[])
156
+
157
+ {
158
+
159
+ bool found = false;
160
+
161
+ if (argc == 2)
162
+
163
+ found = check(argv[1]);
164
+
165
+ if (found)
166
+
167
+ cout << "コマンドラインの引き数は : " << argv[1] << endl;
168
+
169
+ else
170
+
171
+ cout << "error: 入力誤りです"<< endl;
172
+
173
+ }
174
+
175
+ ```

1

全パターン生成のコードを追加

2020/06/30 09:40

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -57,3 +57,53 @@
57
57
  }
58
58
 
59
59
  ```
60
+
61
+ **追記**
62
+
63
+ 全パターンを生成したいのなら、
64
+
65
+ ```C++
66
+
67
+ #include <iostream>
68
+
69
+ using namespace std;
70
+
71
+
72
+
73
+ const int n = 3; // n <= 26. 3 for A,B,C. 5 for A,B,C,D,E.
74
+
75
+ char a[n], used[n];
76
+
77
+
78
+
79
+ void show(int k)
80
+
81
+ {
82
+
83
+ for (int i = 0; i < k; i++) cout << a[i] << ',';
84
+
85
+ cout << a[k] << '\n';
86
+
87
+ }
88
+
89
+
90
+
91
+ void generate(int i)
92
+
93
+ {
94
+
95
+ if (i == n) return;
96
+
97
+ for (int j = 0; j < n; j++)
98
+
99
+ if (!used[j])
100
+
101
+ used[j] = a[i] = 'A'+j, show(i), generate(i+1), used[j] = 0;
102
+
103
+ }
104
+
105
+
106
+
107
+ int main() { generate(0); }
108
+
109
+ ```