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 name、変換しようとしました:char[]

エラー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」) から減算して 1 を加算するだけで実行できることを行います。もちろん、これはラテン小文字のアルファベットに対してのみ機能しますが、対処しているのはそれだけのように見えるため、文字の数値で算術演算を行うときに発生する可能性のある多くの問題を無視できます。

を に変換するcharにはint、次を使用できます。

// 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 に答える