1

我有一个类,我想生成字符串“123”的所有排列

所以我想要字符串 "123","321","132" 等

在这个类中,我定义了一个向量,它将保存我以后要使用的所有这些字符串......

这是我用来查找所有排列的递归:

  findPermutations(char *set, int begin, int end){

     int i;
     int range = end - begin;
   if(range == 0) myvE.push_back(set); //notice how I want to update the vector
     else{

    for(i=0;i<range;i++){
        swap(set[begin],set[begin+i]);
        findPermutations(set,begin+1,end);
        swap(set[begin],set[begin+i]);
      }
     }
   }

如果范围为 0,则该集合将仅具有下一个排列。我想将该排列存储在向量中,但最后我的向量充满了“123”字符串

我不明白这里发生了什么

有人可以帮帮我吗?

谢谢

4

1 回答 1

0

我认为问题在于您多次将指向同一字符串的指针添加到向量中,这意味着您的向量将存储指向完全相同字符串的多个指针。由于您在递归中更改此字符串,因此输出将多次是相同的字符串。

要解决此问题,请考虑将字符串的副本存储在向量中,或者切换到类似 atd::string 的类型,以便将字符串添加到向量实际上会为您创建一个副本。

希望这可以帮助!

于 2012-04-08T16:49:05.293 回答