使用枚举将字符串转换为整数并将其作为整数数组存储在c#中

时间:2012-12-01 05:50:39

标签: c# string enums foreach to-char

我想将字符串转换为字符数组。此外,必须使用枚举将字符数组中的值转换为数值。以整数形式返回的值必须存储在整数数组中。

我的编码是:

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 name转换为char[]它会出现如下错误:

error1

所以,我试图更改NumGen as int[],它说错误是这样的:

error2

我该如何解决?

2 个答案:

答案 0 :(得分: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;
    }

我希望这会有所帮助

答案 1 :(得分:0)

您正在使用此枚举方法执行某些操作,只需将字符的数值转换为int,然后从最小字符('a')中减去并添加一个。当然,这仅适用于拉丁文小写字母,但这似乎是您正在处理的所有内容,因此我们可以忽略使用字符数值进行算术时可能出现的众多问题。

要将char转换为int,您可以使用以下内容:

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

你可以将它们保存在一个数组中,你应该创建一个适当长度的数组(即输入字符串的长度),然后,当循环遍历源字符串的每个字符时,你保存{{ 1}}导致数组的右侧插槽。有很多方法可以做到这一点。就个人而言,我会使用一个可枚举的块,如下所示:

int

然后在您的调用代码中,您可以使用LINQ提取数组:

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