您好,感谢您阅读我的问题。我希望弄清楚如何存储仅由数字组成的4字符串的所有可能排列,可以重复。
char str[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
sort(begin(str), end(str));
do{
cout << str[0] << ' ' << str[1] << ' ' << str[2] << ' ' << str[3] << '\n';
}while(next_permutation(begin(str), end(str)));
上面的代码是我现在拥有的。它打印出排列,但是我不确定如何存储它们。同样,它循环遍历我需要的9999之后的排列,似乎重新开始。我正在寻找一种将'0000','0001','0002','0003','0004',......,'9999'(0000-9999)存储到字符串向量中的方法。我必须做到这一点而不能递归,并且可以接受使用STL。
答案 0 :(得分:3)
只需将数字0到9999存储在字符串向量中。无需使用next_permutation。
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main(int argc, char* argv[]) {
vector<string> nums;
for(int i = 0; i < 10000; ++i) {
string num = to_string(i);
nums.push_back(string(4 - num.length(), '0') + num);
}
for(string& s: nums) {
cout << s << " ";
}
cout << endl;
return 0;
}
答案 1 :(得分:0)
我试图快速编写此代码,这就是为什么我使用MACRO DIGITFOR
的原因。
#define DIGITFOR(i) for (char i='0'; i <= '9'; i++)
vector<string> permutations;
DIGITFOR(i) DIGITFOR(j) DIGITFOR(k) DIGITFOR(l){
char cad[5];
cad[4]='\0';
cad[0]=i;
cad[1]=j;
cad[2]=k;
cad[3]=l;
permutations.push_back(cad);
}