由仅数字0-9组成的四个字符串的排列

时间:2018-12-11 19:00:25

标签: c++ c++11

您好,感谢您阅读我的问题。我希望弄清楚如何存储仅由数字组成的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。

2 个答案:

答案 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);
}