#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
Итак, первая строка возвращает подпоследовательности; отличный!
Во-вторых, если я сохраню то же самое в векторе, а затем попытаюсь распечатать его, мне снова и снова выдаётся одна и та же строка. Где реализация может идти не так?
Благодарю.
Где реализация может идти не так?
Вот:
vector<char*> ans;
Объяснение: Вы создали вектор указателя. Так как каждый раз, когда вы нажимаете один и тот же указатель в массиве, и когда указанная выходная память изменяется, она также будет изменять вывод уже выдвинутых записей.
Чтобы исправить проблему используйте std::string
вместо char array
Других решений пока нет …