#include <iostream>
#include <vector>
using namespace std;
int count;
vector<char*> ans;
char result[1000]; //result will store the current subsequence
void printAllSubsequences(char str[], int beg, int res_index) {
if(str[beg] == '\0') { // if you reach end of string, print the result(i.e.,one of the subsequences). Recursion quits after encountering the last element in the given string str
result[res_index] = '\0';
++count;
cout<<result<<' ';
ans.push_back(result);
return;
}
printAllSubsequences(str, beg+1, res_index);
result[res_index] = str[beg];
printAllSubsequences(str, beg+1, res_index+1);
}
int main() {
char str[1000]; //str is the string whose permutations we have to find
cin >> str;
char result[1000];
printAllSubsequences(str, 0, 0);
cout<<count<<endl;
for(vector<char*>::iterator ii = ans.begin(); ii!=ans.end(); ++ii){
cout<<(*ii)<<' ';
}
cout<<endl;
}
当我输入
时abcd
我得到以下作为输出
d c cd b bd bc bcd a ad ac acd ab abd abc abcd 16
abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd
所以,第一行返回子序列;大! 对于,第二个如果我将它存储在矢量中然后尝试将其打印出来,它会一遍又一遍地给我相同的字符串。实施哪里可能出错?
感谢。
答案 0 :(得分:2)
实施哪里可能出错?
下面:
vector<char*> ans;
说明:您已经创建了一个指针向量。因为每次在数组中推送相同的指针,所以一旦指向的内存输出发生变化,它也会改变已经推送的条目的输出。
要解决此问题,请使用std::string
代替char array