簡體   English   中英

識別C或C ++中的空格分隔符和換行符

[英]recognizing both space delimiter and newline character in C or C++

在編程比賽中,通常輸入的形式為:

1 3 5 544
4 
2 3 22
2423 
2 

其中有多行整數用空格分隔。 我一直在試圖弄清楚如何用C或C ++讀取這些輸入,但是永遠無法真正使它工作。 我在網絡上找到的解決方案要么使用scanf或getline(或fget),但是每當我嘗試時,它們要么無法識別換行符,要么當我嘗試將它們與for循環結合使用時,第一次迭代是沒有執行。

有競爭力的程序員如何閱讀此類輸入?

使用getline()逐行讀取流(建議使用“ getline函數”,它與std::string ,而不是“ istream的getline方法”)。

然后要提取數字,請使用std::istringstream初始化,該字符串由getline()調用讀取的字符串初始化。

在熟練的編程中-根本不要使用C ++輸入-它太慢了,並且會嚴重影響您的時間(特別是如果期望的解決方案是O(n)或更快)。 程序規范通常以這種方式創建,即瑣碎的scanf可以完成這項工作(有意地,因此您可以專注於算法而不是讀取輸入)。 您的問題是,您可能想解析空白並且不知道如何執行此操作(使用scanf-您無需這樣做)。 例如,讓我們分析包含以整數分隔的兩個整數的多行:

int x, y;
while (foo) {
    scanf("%d %d", &x, &y);
}

這樣就可以了,您根本不必擔心換行符。 如果您遇到這種情況,那么scanf太慢了(可能在競爭中)-您可能需要通過調用getchar並逐字節處理輸入來創建自己的專用解析函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM