2

配列マッチング方法を探しています。

コードが示すように、ここに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

これがあなたが欲しいものです。を使用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 に答える
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 に答える