在编程比赛中,给出的输入通常是以下形式:
1 3 5 544
4
2 3 22
2423
2
其中有多个由空格分隔的整数行。我一直试图弄清楚如何用C或C ++读取这些输入,但却永远无法真正实现它。我在网上找到的解决方案使用scanf或getline(或fget),但每当我尝试时,他们要么无法识别换行符,要么当我尝试将它们与for循环结合使用时,第一次迭代不是没有执行。
竞争程序员如何阅读此类输入?
答案 0 :(得分:-1)
使用getline()
逐行阅读流(建议使用" getline函数",它与std::string
一起使用,而不是" istream的" getline方法&# 34。)
然后,要使用std::istringstream
调用读取的字符串初始化,请使用getline()
提取数字。
答案 1 :(得分:-1)
在竞争性编程中 - 根本不使用C ++输入 - 它太慢并且会严重反映您的时间(特别是如果预期的解决方案是O(n)或更快)。程序规范通常以这样的方式创建,即普通的scanf将完成工作(故意,因此您可以专注于算法而不是读取输入)。你的问题是,你可能想要解析空格而不知道如何做到这一点(使用scanf - 你不需要)。例如,让我们解析包含两个由空格分隔的整数的多行:
int x, y;
while (foo) {
scanf("%d %d", &x, &y);
}
这样可以正常工作,您根本不需要担心换行。 如果你遇到这种情况,那个scanf太慢了(它可能在竞争中) - 你可能需要通过调用getchar并逐字节处理输入来创建自己的专用解析函数。