我正在寻找一种数组匹配方法。
这里我有两个数组,代码显示
char[] normalText = new char[26] {'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'};
char[] parsedText = new char[26] {'b', 'c', 'd', 'e', 'f', 'g', ...};
并且,我想匹配它们,如果我在程序中写“abc”它将变成“bcd” 并且,我已经制作了这样的文本解析器方法:
parsing = input.ToCharArray();
foreach (char c in parsing)
{
throw new NotImplementedException();
}
但是,我不知道在foreach语句之后我应该做什么样的查询来匹配它们。如果你知道如何在代码中匹配这个,请在这里发布,这将是VERY2 APPRECIATED
答案 0 :(得分:2)
我会用这样的东西:
var input = "abc";
var parsing = input.ToCharArray();
var result = new StringBuilder();
var offset = (int)'a';
foreach (var c in parsing) {
var x = c - offset;
result.Append(parsedText[x]);
}
答案 1 :(得分:1)
看起来你想用这些来进行1:1的翻译。
最好(即:最具扩展性)的方法可能是使用字典:
Dictionary<char, char> dictionary = new Dictionary<char, char>();
dictionary.Add('a', 'b');
dictionary.Add('b', 'c');
dictionary.Add('c', 'd');
//... etc (can do this programmatically, also
然后:
char newValue = dictionary['a'];
Console.WriteLine(newValue.ToString()); // "b"
等等。使用字典你也可以获得列表的所有功能,这可以非常方便,具体取决于你正在做什么。
答案 2 :(得分:0)
这是你想要的。您可以使用Array.IndexOf(oldText, s)
获取旧数组中的字符索引,然后通过该索引获取新数组中的值。
string input="abc";
char[] oldText = new char[26] {'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'};
char[] newText = new char[26] { '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','a'};
char[] array = input.ToCharArray();
StringBuilder output= new StringBuilder();
foreach(char s in array)
{
output.Append(newText[Array.IndexOf(oldText, s)]);
}
Console.WriteLine(output.ToString()); // "bcd"
答案 3 :(得分:0)
像这样的东西,现在把它格式化为最适合你的方式。
char[] normalText = new char[26] {'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'};
char[] dictionary = new char[26] {'z', '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' };
parsing = input.ToCharArray();
foreach (char c in parsing)
{
if(index(c,normalText)<= dictionary.Length)
Console.WriteLine(dictionary[index(c,normalText)]);
}
int index(char lookFor, char[] lookIn)
{
for (int i = 0; i < lookIn.Length; i++)
{
if (lookIn[i] == lookFor)
return i;
}
return -1;
}