如果是我,我会保持每个字符的字典映射它是相应的莫尔斯字符串。这将使来回转换变得容易。
例如:
private static Dictionary<char, string> MorseMap = new Dictionary<char, string>
{
{'A', ".-"}, {'B', "-..."}, {'C', "-.-."}, {'D', "-.."},
{'E', "."}, {'F', "..-."}, {'G', "--."}, {'H', "...."},
{'I', ".."}, {'J', ".---"}, {'K', "-.-"}, {'L', ".-.."},
{'M', "--"}, {'N', "-."}, {'O', "---"}, {'P', ".--."},
{'Q', "--.-"}, {'R', ".-."}, {'S', "..."}, {'T', "-"},
{'U', "..-"}, {'V', "...-"}, {'W', ".--"}, {'X', "-..-"},
{'Y', "-.--"}, {'Z', "--.."},{'1', ".----"}, {'2', "..---"},
{'3', "...--"}, {'4', "....-"},{'5', "....."}, {'6', "-...."},
{'7', "--..."}, {'8', "---.."},{'9', "----."}, {'0', "-----"},
{'.', ".-.-.-"}, {',', "--..--"},{'?', "..--.."}, {'\'', ".----."},
{'!', "-.-.--"}, {'/', "-..-."},{'(', "-.--."}, {')', "-.--.-"},
{'&', ".-..."}, {':', "---..."},{';', "-.-.-."}, {'=', "-...-"},
{'+', ".-.-."}, {'-', "-....-"},{'_', "..--.-"}, {'"', ".-..-."},
{'$', "...-..-"}, {'@', ".--.-."}
};
现在,使用从该映射中的键和值,它很容易进行编码和解码,以莫尔斯电:
private static string ConvertToMorse(string input)
{
var morse = new StringBuilder();
foreach (var character in input)
{
var upperCaseChar = char.ToUpper(character);
if (MorseMap.ContainsKey(upperCaseChar))
{
morse.Append(MorseMap[upperCaseChar]);
}
else
{
// If there's no mapping for this character, just add it
morse.Append(character);
}
// Add a space between each morse string.
morse.Append(' ');
}
return morse.ToString().Trim();
}
private static string ConvertToAlpha(string morse)
{
var alpha = new StringBuilder();
// Split words on double-spaces so we can add single spaces back where needed
var morseCodeWords = morse.Split(new[] {" "}, StringSplitOptions.None);
foreach (var morseCodeWord in morseCodeWords)
{
var morseCodeStrings = morseCodeWord.Split(' ');
foreach (var morseCodeString in morseCodeStrings)
{
if (MorseMap.ContainsValue(morseCodeString))
{
alpha.Append(MorseMap.First(item => item.Value == morseCodeString).Key);
}
else
{
// If there's no mapping for the string, just add it
alpha.Append(morseCodeString);
}
}
// Add a space between each word
alpha.Append(' ');
}
return alpha.ToString();
}
使用例:
private static void Main()
{
var test = "This is my test string.";
var morseVersion = ConvertToMorse(test);
var alphaVersion = ConvertToAlpha(morseVersion);
Console.WriteLine("Original string ... {0}", test);
Console.WriteLine("Morse version ..... {0}", morseVersion);
Console.WriteLine("Alpha version ..... {0}", alphaVersion);
}
索引是从零开始的。你应该重复输入。Leenght - 1. – MvdD 2015-04-03 03:36:22
好吧。我想通过这种方式我可以在第一个元素中搜索原始字符串。 – 2015-04-03 03:38:23
@ user18044:他检查它是否小于('<')input.Length,所以这不是问题。 – StriplingWarrior 2015-04-03 03:38:54