2012-12-01 59 views
0

我想將字符串轉換爲字符數組。此外,字符數組中的值必須使用枚舉轉換爲數字值。以整數形式返回的值必須存儲在整數數組中。使用枚舉將字符串轉換爲整數並將其作爲整數數組存儲在c中#

我的編碼是:

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()被正確粘貼了嗎?行,列或值1沒有定義。 – 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; 
    } 

我希望這有助於

+0

雅,它的工作!謝謝 – janani

+0

@janani我試過上面的代碼,它工作正常... –

+0

@janani標記答案是正確的,如果有幫助! –

0

您使用此枚舉的方法做的東西,可以通過簡單的字符的數值轉換成int,然後從最小字符減去來完成(「A」)並添加一個。當然,這隻適用於拉丁語小寫字母表,但這似乎是您正在處理的全部內容,所以我們可以忽略使用字符數值進行算術時可能出現的大量問題。

要轉換charint,您可以使用以下命令:

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

您可以在陣列保存這些,你應該創建適當長度的數組(即的長度輸入字符串),然後在遍歷源字符串的每個字符時,將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();