递归期间数组的行为

时间:2017-07-07 19:05:08

标签: c++ recursion vector

#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

所以,第一行返回子序列;大! 对于,第二个如果我将它存储在矢量中然后尝试将其打印出来,它会一遍又一遍地给我相同的字符串。实施哪里可能出错?

感谢。

1 个答案:

答案 0 :(得分:2)

  

实施哪里可能出错?

下面:

vector<char*> ans;

说明:您已经创建了一个指针向量。因为每次在数组中推送相同的指针,所以一旦指向的内存输出发生变化,它也会改变已经推送的条目的输出。

要解决此问题,请使用std::string代替char array