标签:题目 怎么 c++ style 实现 暂停 行数据 只读 pre
--当时在某计科实验室的时候,大家都用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平台本来也很少,后续看看有没有好的刷一下。
标签:题目 怎么 c++ style 实现 暂停 行数据 只读 pre
原文地址:https://www.cnblogs.com/NEFPHYS/p/mcs1.html