分行符號‘\n’和斷行符號符‘\r’
顧名思義,分行符號就是另起一行,斷行符號符就是回到一行的開頭,所以我們平時編寫檔案的斷行符號符應該確切來說叫做斷行符號分行符號
'\n' 10(0x0a) 換行(newline)
'\r' 13(0x0d) 斷行符號(return)
也可以表示為'\x0a'和'\x0d'.(16進位)
在windows系統下,斷行符號分行符號號是"\r\n".但是在Linux等系統下是沒有"\r"符號的。
在解析文本或其他格式的檔案內容時,常常要碰到判定斷行符號換行的地方,這個時候就要注意既要判定"\r\n"又要判定"\n"。
寫程式時可能得到一行,將其進行trim掉'\r',這樣能得到你所需要的string了。
=============================================== 【注/掌握:xqzhang2015】
1. 寫程式時,代碼裡面都是'\n'表示換行。
2. 對於檔案裡的換行,
(1)Windows系統裡,檔案每行結尾是"<斷行符號><換行>""\r\n"
(2)Mac系統裡, 檔案每行結尾是"<斷行符號>",即'\r'
(3)Unix系統裡, 檔案每行結尾是"<換行>",即'\n'
所以,用'\n'作為作為分行符號的檔案,用Windows的記事本開啟時 會沒有換行;
而用"\r\n"作為分行符號的檔案(windows檔案),用Linux或mac的vim開啟時 會將\r顯示成^M。
Mac的zsh中,採用\n作為分行符號,遇到\r將會被解釋為斷行符號符,即移動到該行的行首,然後繼續執行代碼。
附問題X-1:
【將mac或者unix系統裡vim顯示^M的替換為正常分行符號的問題】
在Linux中執行.sh指令碼,異常/bin/sh^M: bad interpreter: No such file or directory。
分析:這是不同系統編碼格式引起的:在windows系統中編輯的.sh檔案可能有不可見字元,所以在Linux系統下執行會報以上異常資訊。
解決:
1)在windows下轉換:
利用一些編輯器如UltraEdit或EditPlus等工具先將指令碼編碼轉換,再放到Linux中執行。轉換方式如下(UltraEdit):File-->Conversions-->DOS->UNIX即可。
2)也可在Linux中轉換:
首先要確保檔案有可執行許可權 #sh>chmod a+x filename
然後修改檔案格式 #sh>vi filename
利用如下命令查看檔案格式 :set ff 或 :set fileformat
可以看到如下資訊 fileformat=dos 或 fileformat=unix
利用如下命令修改檔案格式 :set ff=unix 或 :set fileformat=unix{set ff=unix 【fileformat】}
:wq (存檔退出)
最後再執行檔案 #sh>./filename
what’s meaning of “configure: error: cannot run /bin/sh config/config.sub”
編一個東西的時候
執行./configure的時候出的錯
“configure: error: cannot run /bin/sh config/config.sub”
結果發現是系統沒有裝libtool的緣,然後再./configure則沒有這個問題了
附問題X-2:
【如何c++去除string字串末尾的\n,\r,\t,空格。】
#include <iostream>#include <string>using namespace std;/* 刪除字串行首/行尾的字元 */int main(void){string s = "\r\n\t 是\t這是隨便寫的一句話。\t\t ";size_t n = s.find_last_not_of(" \r\n\t");if(n != string::npos){s.erase( n + 1 , s.size() - n );}n = s.find_first_not_of ( " \r\n\t" );if(n != string::npos){s.erase( 0 , n );}cout << s << endl;}➜ test g++ test.cpp➜ test ./a.out 是這是隨便寫的一句話
給大家推薦一個網站:http://stackoverflow.com/
附問題X-3:
【mac vim處理dos分行符號^M】
今天用macvim開啟同事寫的一個檔案,代碼變成只有一行了,在原來的換行後面多了^M。
查到這個是因為dos分行符號在我這邊不支援,於是替換^M為mac這邊的分行符號,
在vim編輯模式下輸入:
:%s/^M/\r/g ;^M由ctrl+V+M獲得
這樣會替換掉所有的^M為換行,再儲存檔案就ok