2016-11-10 3 views
-1

아래에는 polybius 사각형을 사용하는 해독 방법 스 니펫이 포함되어 있습니다. 첫 번째 두 사용자 입력을 받아 좌표로 변환하여 사각형의 어떤 문자가 입력 된 숫자와 일치하는지 살펴보고 싶습니다. 내 코드는 x 값 작동하고 난 Y에 대한 변경없이 x와 y 사이 incriment을 찾는 데 도움이 필요 (48)로 Y를 할당 48문자 배열에서 조회를 위해 x를 기록한 후 내 카운터가 0에서 48으로 이동하는 것을 어떻게 막을 수 있습니까?

public string DecryptMessage(string userInput) 
    { 
     string outputMessage = string.Empty; 

     char[,] alphaValues = new char[5, 5] { 
      {'A', 'B', 'C', 'D', 'E'}, 
      {'F', 'G', 'H', 'I', 'K'}, 
      {'L', 'M', 'N', 'O', 'P'}, 
      {'Q', 'R', 'S', 'T', 'U'}, 
      {'V', 'W', 'X', 'Y', 'Z'}, 
     }; 

     char[] userInputArray = userInput.ToCharArray(); 

      for (int i = 0; i < userInputArray.Length; i++) 
      { 
       int x = Convert.ToInt32(userInputArray[i]); i++; 
      //after this point i somehow changes from 0 to 48 with the incriment 
      //if i get this fixed the decrypt will work, still trying to figure this out 

       int y = Convert.ToInt32(userInputArray[i]); 


       char letterToReturn = alphaValues[x, y]; 


       string outputLetter = letterToReturn.ToString(); 
       outputMessage += outputLetter; 

      } 
     return outputMessage; 
    } 
+0

왜 'int x = Convert.ToInt32 (userInputArray [i]);'뒤에 'i ++; '. 이것은 나쁜 결정입니다 – Marusyk

+0

방금 ​​i + 1에 대한 색인을 만들려고합니까? – sr28

+0

인덱스를 저장하는'x' 다음에'i ++'가 증가합니다. 또한, 사용자 입력에 대해'foreach '를 원하지 않습니까? – Greg

답변

0

문제는 당신의 문자 표현을 변환하고 있다는 것입니다 숫자는 찾고자하는 숫자가 아닌 문자를 나타내는 숫자 값이 될 정수로 변환됩니다.

이것을 시도 :

... 
int x = userInputArray[i++] - '0'; 
int y = userInputArray[i] - '0'; 
char letterToReturn = alphaValues[x, y]; 
... 

'0'을 '9'캐릭터로부터 '0'을 뺀 57을 48로 표시되는 유효 실제 수로 숫자 문자를 회전하기 때문이다.

'0'은 48이고 '1'은 49이며 따라서 '9'는 57이되므로 '1'- '0'은 49-48 또는 단지 1입니다. '9'- '0'은 57-48 또는 단지 9입니다.

물론이 작은 트릭은 사용되는 문자 세트에 따라 다르지만 ASCII 및 유니 코드에서 작동합니다.

+0

이것은 정확히 내가 풀려고했던 문제입니다! 고맙습니다! 이제 올바르게 작동합니다! – astrength

+0

@AleahStrength 멋지다! 다행히 도울 수있어. 답변을 수락 된 것으로 표시하십시오. – itsme86