在C或C ++中识别空格分隔符和换行符

时间:2015-02-06 09:51:27

标签: c++ c input newline delimiter

在编程比赛中,给出的输入通常是以下形式:

1 3 5 544
4 
2 3 22
2423 
2 

其中有多个由空格分隔的整数行。我一直试图弄清楚如何用C或C ++读取这些输入,但却永远无法真正实现它。我在网上找到的解决方案使用scanf或getline(或fget),但每当我尝试时,他们要么无法识别换行符,要么当我尝试将它们与for循环结合使用时,第一次迭代不是没有执行。

竞争程序员如何阅读此类输入?

2 个答案:

答案 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并逐字节处理输入来创建自己的专用解析函数。