C#控制台输入-OJ

--当时在某计科实验室的时候,大家都用c++,我自己用着C#(半吊子都算不上那种),什么都不懂的。实验室出规则说每星期要做个OJ比赛,我想着做就做吧,C#应该也是可以的,但是看到题目就很蒙了啊,先不管要怎么算出结果,连输入都不会,从控制台输入一串数字,这个怎么实现/???最后的结果就是所有的题目我一次都没有做出来,,,然后,,,灰溜溜走人去做数学建模去了。

最近又开始跟着刘铁猛老师的C#入门视频和C#入门经典一起系统学习,看了1/3突然发现是不是该去做做OJ的题目,然后想起了上述的悲催往事,现在就来解决吧:

C# system命名空间下的console类下的read方法有三个,分别是Console.Read(), Console.ReadKey(), Console.ReadLine(),

1 int s = Console.Read();
2  //输入1
3  Console.WriteLine(s);
4  //输出为49
5  //该方法只读取一个字符,并将该字符的unicode编码返回为int类型

很显然这个方法是没办法处理我们读取一行数据的需求的。

 1  var s = Console.ReadKey();
 2  //按下2键
 3  Console.WriteLine(s.GetType().FullName);
 4  //输出 System.ConsoleKeyInfo
 5 Console.WriteLine(s);
 6  //输出 System.ConsoleKeyInfo
 7  //该方法只响应一个按键事件
 8  /*ReadKey()方法的最常见用途之一是在用户
 9  * 按下某个键时暂停程序执行, 然后应用终止
10  * 或显示其他信息窗口。 下面的示例使用
11  * ReadKey()方法在终止应用之前等待用户按 enter 键。*/

显然也是不满足我们的需求的,唯一剩下可能的方法就是Console.ReadLine(),该方法的返回值是一个字符串,只有通过处理才能转换成数值。

对于一个数来说,从字符串转换成数字是很简单的,通过Convert.to*()函数可以实现,但是对于形如[12 23 34 45]这种输入方式就比较棘手了,从R语言那边的经验来看,最好的办法是先分割字符串了,那么在C#里面的分割字符串方法是不是也叫做split呢,答案是的,和R的处理是一样的,不过Split这个方法在System.Text这个命名空间里面。因此可以有如下写法:

string s = Console.ReadLine();
            //输入 12 23 34 45
            string[] sSplit = s.Split();
            int[] sNum = new int[sSplit.Length];
            for (int i = 0; i < sSplit.Length; i++)
            {
                sNum[i] = Convert.ToInt32(sSplit[i]);
            }

            for (int i = 0; i < sSplit.Length; i++)
            {
                Console.WriteLine(sNum[i] + " " + sNum.GetType().FullName);
            }
            //输出
            //12 System.Int32[]
            //23 System.Int32[]
            //34 System.Int32[]
            //45 System.Int32[]

总体上来看这个输入的方式要比c,c++复杂很多,但是目前我也没有发现什么好的办法,好像支持C#的oj平台本来也很少,后续看看有没有好的刷一下。

猜你喜欢

转载自www.cnblogs.com/NEFPHYS/p/mcs1.html