2012-04-16 3 views
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(); 
     } 

, но я не знаю, какой запрос я должен сделать, чтобы соответствовать им после заявления Еогеаспа. если вы знаете, как соответствовать этому в коде, пожалуйста, напишите здесь, это было бы ОЧЕНЬ ПРИЗНАНО

+0

У вас есть два массива, называемых 'normalText'? –

+0

Это «домашнее задание»? – cfedermann

+1

Вы хотите проверить, соответствуют ли они, или вы хотите узнать, является ли это подмножеством другого? –

ответ

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" 
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 перевод.

Лучшее (т.е. наиболее расширяемой) способ сделать это, вероятно, со словарем:

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" 

и так далее. Используя словарь, вы получаете все возможности списков, которые могут быть чрезвычайно удобными в зависимости от того, что вы делаете.

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; 
    } 
Смежные вопросы