C#处理空格分隔的数组输入:解决格式转换错误问题
问题解决:读取空格分隔的整行输入并统计数字数量
错误原因
你的代码在本地运行正常是因为本地测试时可能每次输入一个数字按回车,但在线OJ的输入格式是第二行所有数字用空格分隔成一整行。原代码循环中每次调用Console.ReadLine()读取单个整数,当读到第二行带空格的整行字符串时,Convert.ToInt32()无法将带空格的字符串转为整数,因此抛出格式错误。
修改方案
直接读取第二行整行内容,按空格分割成字符串数组后逐个转换为整数,同时可以直接统计1和4的数量(无需额外存储整个数组,提升效率):
修改后的代码
// 读取数组大小 int szam = int.Parse(Console.ReadLine()); // 读取第二行整行并分割为字符串数组,过滤空字符串(处理多个连续空格的情况) string[] numStrs = Console.ReadLine().Split(new[] {' '}, StringSplitOptions.RemoveEmptyEntries); int szam1 = 0; int szam4 = 0; // 遍历分割后的字符串,转换为整数并统计 foreach (string s in numStrs) { int num = int.Parse(s); if (num == 1) szam1++; else if (num == 4) szam4++; } // 判断并输出结果,条件可简化为szam4 > szam1(大于已包含不等于的逻辑) Console.WriteLine(szam4 > szam1 ? "True" : "False");
关键优化点
- 使用
Split(new[] {' '}, StringSplitOptions.RemoveEmptyEntries)分割字符串,避免因多个连续空格产生空字符串导致转换失败。 - 无需创建完整数组存储所有元素,直接在遍历过程中统计1和4的数量,减少内存占用。
- 简化判断条件:
szam4 > szam1已经包含szam4 != szam1的逻辑,无需重复判断。
内容的提问来源于stack exchange,提问作者Kenobi
相关产品推荐
相关产品推荐

