亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

讓std :: ifstream處理LF,CR和CRLF?

讓std :: ifstream處理LF,CR和CRLF?

C++
HUWWW 2019-08-16 15:41:18
讓std :: ifstream處理LF,CR和CRLF?具體來說我很感興趣istream& getline ( istream& is, string& str );。是否有ifstream構造函數的選項告訴它將所有換行編碼轉換為引擎蓋下的'\ n'?我希望能夠打電話getline并優雅地處理所有行結尾。更新:為了澄清,我希望能夠編寫幾乎可以在任何地方編譯的代碼,并且幾乎可以從任何地方獲取輸入。包括'\ r'沒有'\ n'的稀有文件。最大限度地減少軟件用戶的不便。解決這個問題很容易,但我仍然對標準中正確處理所有文本文件格式的方式感到好奇。getline讀取一個完整的行,直到'\ n',成為一個字符串。'\ n'從流中消耗,但getline不包含在字符串中。到目前為止這很好,但是在'\ n'之前可能會有一個'\ r'被包含在字符串中。有三種類型的行結尾的文本文件中看到:“\ n”是Unix機器上的常規結尾,“\ r”是在舊的Mac操作系統使用,Windows使用一對(我認為),“\ r”跟隨'\ n'。問題是getline在字符串末尾留下'\ r'。ifstream f("a_text_file_of_unknown_origin");string line;getline(f, line);if(!f.fail()) { // a non-empty line was read    // BUT, there might be an '\r' at the end now.}編輯感謝Neil指出這f.good()不是我想要的。!f.fail()是我想要的。我可以自己手動刪除它(請參閱此問題的編輯),這對于Windows文本文件很容易。但是我擔心有人會輸入一個只包含'\ r'的文件。在這種情況下,我認為getline將消耗整個文件,認為它是一行!..那甚至不考慮Unicode :-)..也許Boost有一種很好的方式從任何文本文件類型一次消耗一行?編輯我正在使用它來處理Windows文件,但我仍然覺得我不應該這樣做!這不會為'\ r'專用文件分叉。if(!line.empty() && *line.rbegin() == '\r') {     line.erase( line.length()-1, 1);}
查看完整描述

3 回答

  • 3 回答
  • 0 關注
  • 760 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號