2012-12-01 2 views
0

문자열을 문자 배열로 변환하고 싶습니다. 또한 문자 배열의 값은 열거 형을 사용하여 숫자 값으로 변환되어야합니다. 정수로 반환 된 값은 정수 배열에 저장해야합니다.enum을 사용하여 문자열을 정수로 변환하고 정수 배열로 저장합니다. #

내 코드는 다음과 같습니다

enum alphabets { a = 1,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} 
static void Main() 
    { 
     int row,column; 
     String value1; 
     Console.WriteLine("Enter string"); 
     string UserString= Console.ReadLine(); 
     int len = UserString.Length; 

     if (len % 2 == 0) 
      { 
      row = len/2; 
      column = len/2; 
      PrintMatrix(row, column, len, value1); 
      } 

    Console.ReadKey(); 
    } 

static void PrintMatrix(int row, int column, int len, string value1) 
{ 
    Console.WriteLine("Matrix"); 
    string mat_row = value1.Substring(0, row); 
    string mat_col = value1.Substring(row, len - row); 
    GenNum(mat_row,len); 
    GenNum(mat_col,len); 
} 

static void GenNum(string val, int len) 
{ 
    string res = val; 

    foreach (char c in res) 
     { 
     string name = c.ToString(); 
     alphabets parsed = (alphabets)Enum.Parse(typeof(alphabets), name); 
     int NumGen = (int)parsed; 
     Console.WriteLine (NumGen); 
     } 
} 

가 나는 다음과 같은 string namechar[]대로 말하는 오류를 변환하려고 : 그래서

error1

, 내가 NumGen as int[]을 변경했는데, 그것은 말한다 다음과 같은 오류 :

error2

어떻게 해결할 수 있습니까?

+0

당신이 코드는 작동합니다. 'name '을'char []'또는'NumGen'에서'int []'로 바꾸는 이유는 분명히 거기에 있어야하는 유형이 아닌 경우입니다. 맹목적으로 코드를 변경하는 것보다 자신이하는 일에 대해 생각하는 것이 중요합니다. – siride

+1

정적 void Main()이 제대로 붙여 넣어 졌습니까? row, column 또는 value1에 대한 정의가 없습니다. – ryadavilli

+0

나는 당신의 코드를 시도했다, 그것은 완벽하게 잘 작동한다! 문자열의 int []를 원하십니까? –

답변

2

GenNum이 이제 문자열 표현의 int []를 반환합니다.

enum alphabets { a = 1, 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 } 
    static void Main() 
    { 
     Console.WriteLine("Enter string"); 
     string UserString = Console.ReadLine(); 
     int len = UserString.Length; 
     int row = 1, column = 3; 

     if (len % 2 == 0) 
     { 
      row = len/2; 
      column = len/2; 
      PrintMatrix(row, column, len, UserString); 
     } 

     Console.ReadKey(); 
    } 

    static void PrintMatrix(int row, int column, int len, string value1) 
    { 
     Console.WriteLine("Matrix"); 
     string mat_row = value1.Substring(0, row); 
     string mat_col = value1.Substring(row, len - row); 
     int[] arrayRow = GenNum(mat_row, len); 
     int[] arrayCol = GenNum(mat_col, len); 
    } 

    static int[] GenNum(string val, int len) 
    { 
     string res = val; 
     int[] intArray = new int[len]; 
     int index = 0; 

     foreach (char c in res) 
     { 
      string name = c.ToString(); 
      alphabets parsed = (alphabets)Enum.Parse(typeof(alphabets), name); 
      int NumGen = (int)parsed; 
      intArray[index++] = NumGen; 
      Console.WriteLine(NumGen); 
     } 

     return intArray; 
    } 

나는 이것이 당신은 단순히 작은 문자에서 뺀 다음 int로 캐릭터의 숫자 값을 변환하여 수행 할 수 있습니다 뭔가를이 열거 방법을 사용

+0

예, 작동했습니다! 감사합니다 – janani

+0

@ janani 위의 코드를 시도해 보았지만 정상적으로 작동합니다 ... –

+0

@janani는 올바른 답변으로 표시하면 도움이됩니다! –

0

도움이되기를 바랍니다 ('A') 하나 추가 물론, 이것은 라틴 소문자 알파벳에 대해서만 작용 합니다만, 여러분이 다루고있는 것처럼 보이므로, 문자의 숫자 값으로 산술을 할 때 발생할 수있는 수많은 문제를 무시할 수 있습니다. , 적절한 길이의 배열을 (즉,의 길이를 만들어야합니다

// ch is a char 
int intVal = (int)ch; 

당신은 배열이를 저장할 수 있습니다

는 다음을 사용하는 char int로 변환하려면 입력 문자열)을 입력 한 다음 소스 문자열의 각 문자를 반복 할 때 int 결과를 배열의 오른쪽 슬롯에 저장합니다. 이렇게하는 방법은 여러 가지가 있습니다. 개인적으로, 나는 그렇게 같이 열거 가능한 블록을 사용하십시오 : 당신의 호출 코드에서

private static IEnumerable<int> StringToInts(string val) { 
    var aVal = (int)'a'; 
    foreach(var ch in val) 
     yield return (int)ch - aVal + 1; 
} 

그 다음을, 당신은 LINQ를 사용하여 배열을 추출 할 수 있습니다 :

var intArray = StringToInts("Some string").ToArray();