递归算法中的分段错误

时间:2015-02-28 12:47:33

标签: c++ algorithm recursion fault

我正在尝试编写一个递归算法,打印出手机中数字字符代表的所有可能组合。就像好老手机一样; 2:ABC,3:DEF等等。

Ex 23应该打印AD,AE,AF,BD,BE,BF,CD,CE和CF. 我写了以下算法,我相信它应该工作。虽然我不知道,因为我的编译器都不会让它完成。

#include <iostream>
#include <string>
#include <cstring>

using namespace std;
static int totalNbr = 0;


void coolKey(string number, string result)
{
   totalNbr++;
   string keychar[] = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};


int nbrSize = number.length(); 


if (nbrSize == 0)   // Basecase - We've reached 0 didgets
{
     cout << result << endl;    
     return;
}

else
{

    for (int i = 0; i < keychar[(number[0]-'0')].length(); i++)
    {

        result += keychar[(number[0]-'0')][i]; // Append char to result.
        number = number.erase(0,1);            // Remove  first didget of the number (eg. "234" becomse "34")
        coolKey(number,result);                // Call coolKey with the new variables.
    }

}

}


int main()
{

    coolKey("23", "");
    return 0;
}

输出结果为:

ad                                                                                                                                                                                         
Segmentation fault                                                                                                                                                                         

我已经尝试搜索错误,它似乎是某种堆栈溢出,或访问只读内存 - 但我似乎无法弄清楚这发生在哪里。我首先想到的是删除字符串字符,但这并没有解决问题。

如果有人能在这里给我一个提示,我会非常感激: - )

祝你好运, 本

1 个答案:

答案 0 :(得分:0)

您显然会尝试删除数字所代表的每个可能字母的第一个数字(number = number.erase(0,1);)。

您应该在for循环之前写入该行,而不是在循环内部。甚至在此之前,存储要删除的数字以便稍后在循环标题中使用。