首頁 > 後端開發 > C++ > 如何使用「std::ifstream」可靠地處理 C 中的混合換行符約定?

如何使用「std::ifstream」可靠地處理 C 中的混合換行符約定?

Patricia Arquette
發布: 2024-12-06 16:39:18
原創
751 人瀏覽過

How Can I Reliably Handle Mixed Newline Conventions in C   Using `std::ifstream`?

使用std::ifstream 處理不同的換行符

雖然C 運行時通常根據平台處理換行符約定,但在某些情況下包含不同換行格式的文字檔案需要統一處理。本文探討如何使用 std::ifstream 來實現此目的。

問題

getline(istream&, string&) 需要一個'n' 字元來標記結尾一行,但文字檔案可能包含「r」、「n」或兩者的不同組合。如果「r」字元位於「n」之前,則它可能會包含在檢索到的行中,從而導致不一致。

中沒有選項ifstream 建構子將各種換行符直接轉換為「n」。但是,可以建立一個自訂函數來處理這種情況:

實作細節

safeGetline 函數利用Streambuf 逐個讀取字符,提供比直接使用std::istream 效率更高。它遍歷流,處理不同的換行符約定:

  • 'n':返回行。
  • 'r':檢查下一個字元是否為“n”,如果是則前進真的。然後,返回該行。
  • std::streambuf::traits_type::eof():如果該行不以換行符號結尾,則將流設為 eof 狀態。
  • 其他字元:將字元附加到字串。

測試程序

範例測試程序示範了safeGetline 函數的用法:

結論結論

結論

結論

結論結論結論結論結論結論結論結論結論結論結論結論結論結論結論結論結論結論結論使用safeGetline函數消除了需要手動換行符處理,並確保跨不同換行符約定的行檢索一致。這種方法為處理來自各種來源的文字檔案提供了強大而靈活的解決方案。

以上是如何使用「std::ifstream」可靠地處理 C 中的混合換行符約定?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板