2012-12-01 61 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();