C#从控制台读取一个矩阵(例如从文本文件中复制/粘贴)

时间:2015-10-01 12:14:58

标签: c# string matrix console

我想知道哪个是读取直接输入控制台的矩阵作为字符串并从文本文件中复制/粘贴的最佳做法?

这是矩阵的一个例子,但总的来说,最后一行是新行,行之间没有换行符(我不知道如何在这里表示矩阵,抱歉):

5 6 8 12 34

13 4 9 20 3

8 17 2 2 5

最好有一个int [,]作为一个结果,可以在控制台上用嵌套循环之类的东西写出来。

提前致谢,对不起新手提问(可能是)!

1 个答案:

答案 0 :(得分:0)

class Program
{
    static void Main(string[] args)
    {
        Console.CancelKeyPress += (o, e) =>
            {//prevent from stopping after Ctrl+C
                e.Cancel = true;
            };

        Console.WriteLine("\n Enter a matrix. Press Ctrl+C when you will have ended.");


        string text = Console.In.ReadToEnd();

        Console.WriteLine("\nParsing...\n");
        int[,] res2a;
        try
        {              
            res2a = parse(text);
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message + ",\n " + ex.StackTrace);
            return;
        }

        Console.WriteLine("\nYou enter: \n");
        for (int i = 0; i < res2a.GetLength(1); i++)
        {
            for (int j = 0; j < res2a.GetLength(0); j++)
                Console.Write("0x{0:X} ", res2a[j, i]);
            Console.WriteLine();
        }

    }

    static int[,] parse(string text)
    { 
        int max_len = 0;
        List<List<int>> res2x = new List<List<int>>();
        string [] tmp1 = text.Split(new char []{'\n', '\r'}, StringSplitOptions.RemoveEmptyEntries);
        foreach(string s1 in tmp1)
        {
            string [] tmp2 = s1.Split(new char [] {' '}, StringSplitOptions.RemoveEmptyEntries);
            res2x.Add(new List<int>(tmp2.ToList().ConvertAll<int>((s)=>int.Parse(s.Trim()))));
            if (tmp2.Length > max_len)
                max_len = tmp2.Length;
        }

        int[,] res2a = new int[max_len, tmp1.Length];
        for (int j = 0; j < tmp1.Length; j++ )
            for (int i = 0; i < res2x[j].Count; i++)                
                res2a[i, j] = res2x[j][i];
        return res2a;
    }
}

看起来很难看,但我现在没有时间。也许,我可以稍后改进。