2

我正在寻找一种数组匹配方法。

这里我有两个数组,如代码所示

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 语句之后我应该做什么样的查询来匹配它们。如果您知道如何在代码中匹配此内容,请在此处发布,非常感谢

4

4 回答 4

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]);
}
于 2012-04-16T12:27:39.647 回答
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"

等等。使用字典,您还可以获得列表的所有功能,这取决于您正在做什么,这可能非常方便。

于 2012-04-16T12:39:10.553 回答
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;
    }
于 2012-04-16T12:53:11.507 回答
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"
于 2012-04-16T12:24:10.303 回答