0
我试图使用Visual Studio 2012以下的C++ 11的代码转换为C#:C++ 11到C#代码转换问题
typedef enum { _A,_B,_C,_D,_E,_F,_G,_H,_I,_J,_K,_L,_M,_N,_O,_1,_2,_3 } TKeyIdentity;
typedef std::vector<TKeyIdentity const> TKeyPath;
typedef std::vector<TKeyPath const> TKeyMap;
const TKeyMap keyPad =
{
{ _H, _L }, // A
{ _I, _K, _M }, // B
{ _F, _J, _L, _N }, // C
{ _G, _M, _O }, // D
{ _H, _N } // E
}
const TKeyPath keyPadRoot =
{
_A, _B, _C, _D, _E, _F, _G, _H, _I, _J, _K, _L, _M, _N, _O, _1, _2, _3
};
TraverseKeyPaths(TKeyPath const &keyPath, int pressesRemaining, int vowelsAllowed)
{
for (auto pressedKey: keyPath)
{
int value = TraverseKeyPaths(keyPad[ pressedKey ],pressesRemaining, vowelsAllowed - isVowel[pressedKey]);
}
}
完整的C++代码可用:http://lucid-motif.blogspot.com/2013/11/coding-puzzle-knight-sequences.html
C#代码:
enum TKeyIdentity { _A, _B, _C, _D, _E, _F, _G, _H, _I, _J, _K, _L, _M, _N, _O, _1, _2, _3 };
List<string> keyPadRoot = new List<string> { "_A", "_B", "_C", "_D", "_E", "_F", "_G", "_H", "_I", "_J", "_K", "_L", "_M", "_N", "_O", "_1", "_2", "_3" };
string[] A = new string[] { "_H", "_L" }; //A
string[] B = new string[] { "_I", "_K", "_M" }; //B
string[] C = new string[] { "_F", "_J", "_L", "_N" }; //C
string[] D = new string[] { "_G", "_M", "_O" }; //D
List<string> keyPadMoves = new List<string>();
keyPadMoves.AddRange(A);
keyPadMoves.AddRange(B);
keyPadMoves.AddRange(C);
keyPadMoves.AddRange(D);
.
.
int TraverseKeyPaths(List<string> keyPadRoot, int pressesRemaining, int vowelsAllowed)
{
foreach (TKeyIdentity pressedKey in Enum.GetValues(typeof(TKeyIdentity)))
{
int value = TraverseKeyPaths(keyPadRoot, pressesRemaining, vowelsAllowed);
}
}
C#代码不按预期工作。问题是与以下行:
TraverseKeyPaths(keyPadRoot, pressesRemaining, vowelsAllowed);
我需要传递的第一个参数为keyPadMoves
;但如果我通过keyPadMoves
,则递归调用进入无限循环。
其中标识'vowels'来自哪里?它也不同于你的C++代码,它通过下面的表达式:'vowelsAllowed - isVowel [pressedKey]' – Jakotheshadows
它看起来不像你在你的递归函数中有一个基本情况。 pressRemaining参数是否应该在任何地方使用?它没有在你的函数中引用或修改。 – Tofystedeth
C++代码不运行。 C#代码不会出于同样的原因运行,并且包含与您的问题无关的显而易见的拼写错误。除了没有运行,C++代码也是一个格式不正确的程序,由于标识符以'_'开始,后跟大写字母。最重要的是,你还没有描述你试图做什么来解决你的问题(你是否使用了调试器?) – Yakk