0

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

我的编码是:

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[]如下所示的错误:

错误1

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

错误2

我该如何解决?

4

2 回答 2

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;
    }

我希望这有帮助

于 2012-12-01T06:02:20.803 回答
0

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

要将 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();
于 2012-12-01T06:06:23.937 回答