使用std::ifstream 處理不同的換行符
雖然C 運行時通常根據平台處理換行符約定,但在某些情況下包含不同換行格式的文字檔案需要統一處理。本文探討如何使用 std::ifstream 來實現此目的。
問題
getline(istream&, string&) 需要一個'n' 字元來標記結尾一行,但文字檔案可能包含「r」、「n」或兩者的不同組合。如果「r」字元位於「n」之前,則它可能會包含在檢索到的行中,從而導致不一致。
解
中沒有選項ifstream 建構子將各種換行符直接轉換為「n」。但是,可以建立一個自訂函數來處理這種情況:
實作細節
safeGetline 函數利用Streambuf 逐個讀取字符,提供比直接使用std::istream 效率更高。它遍歷流,處理不同的換行符約定:
測試程序
範例測試程序示範了safeGetline 函數的用法:
結論結論
結論結論
結論結論結論結論結論結論結論結論結論結論結論結論結論結論結論結論結論結論結論使用safeGetline函數消除了需要手動換行符處理,並確保跨不同換行符約定的行檢索一致。這種方法為處理來自各種來源的文字檔案提供了強大而靈活的解決方案。以上是如何使用「std::ifstream」可靠地處理 C 中的混合換行符約定?的詳細內容。更多資訊請關注PHP中文網其他相關文章!