Поведение массива во время рекурсии

#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

Решение

Где реализация может идти не так?

Вот:

vector<char*> ans;

Объяснение: Вы создали вектор указателя. Так как каждый раз, когда вы нажимаете один и тот же указатель в массиве, и когда указанная выходная память изменяется, она также будет изменять вывод уже выдвинутых записей.

Чтобы исправить проблему используйте std::string вместо char array

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector