递归算法中的分段错误
Segmentation fault in recursive algorithm
我正在尝试编写一个递归算法,它可以打印出手机中数字字符代表的所有可能组合。就像好的旧手机一样; 2: ABC, 3: DEF 等等
Ex 23 应该打印 AD、AE、AF、BD、BE、BF、CD、CE 和 CF。
我已经编写了以下算法,我相信它应该可以工作。虽然我不知道,因为 none 我的编译器会让它完成。
#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
我已经尝试搜索错误,它似乎是某种堆栈溢出,或者是对只读内存的访问——但我似乎无法弄清楚这是在哪里发生的。我一开始以为是string chars的删除,但是并没有解决问题
如果有人能在这里给我提示,我将非常感激:-)
此致,
本
您显然试图擦除该数字代表的每个可能字母的第一个数字 (number = number.erase(0,1);
)。
你应该在 for 循环之前写那一行,而不是在循环内部。甚至在此之前,存储被擦除的数字以供稍后在循环中使用 header.
我正在尝试编写一个递归算法,它可以打印出手机中数字字符代表的所有可能组合。就像好的旧手机一样; 2: ABC, 3: DEF 等等
Ex 23 应该打印 AD、AE、AF、BD、BE、BF、CD、CE 和 CF。 我已经编写了以下算法,我相信它应该可以工作。虽然我不知道,因为 none 我的编译器会让它完成。
#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
我已经尝试搜索错误,它似乎是某种堆栈溢出,或者是对只读内存的访问——但我似乎无法弄清楚这是在哪里发生的。我一开始以为是string chars的删除,但是并没有解决问题
如果有人能在这里给我提示,我将非常感激:-)
此致, 本
您显然试图擦除该数字代表的每个可能字母的第一个数字 (number = number.erase(0,1);
)。
你应该在 for 循环之前写那一行,而不是在循环内部。甚至在此之前,存储被擦除的数字以供稍后在循环中使用 header.