關於 C++ 的 Trim() 實現
前言
C++ 的 std::string 本身提供的介面相當少,如果拿來 Parse 文字的話會覺得少了一些實用的介面,如 Trim() , Trim() 的功能是將字串的前或後的字元做過濾掉指定的字元的動作,通常拿來過濾空白、換行與指定的字元,這次就來實現這個介面,在此做個紀錄。內容
Trim() 在較新的程式語言都會直接支援,但 C++ 卻從不開這個介面出來,在搜尋後發現有簡單的方法可以實現,在 [ CSDN ] C++ string的trim, split方法 裡找到有簡短的方法可以實現,範例如下std::string LTrim( std::string& srcStr , const std::string& charList) { std::string tagStr = srcStr; tagStr.erase( 0 , tagStr.find_first_not_of( charList.c_str() ) ); return tagStr; } std::string RTrim( std::string& srcStr , const std::string& charList) { std::string tagStr = srcStr; tagStr.erase( tagStr.find_last_not_of( charList.c_str() ) + 1 ); return tagStr; } std::string Trim( std::string& srcStr , const std::string& charList ) { return RTrim( LTrim( srcStr , charList ) , charList ); } // std::string str=" ../abc.txt\n"; std::string lTrimStr=LTrim( str , " ./");//abc.txt\n std::string rTrimStr=RTrim( str , "\n");// ../abc.txt std::string trimStr=Trim( str , " ./\n");//abc.txt
範例有 3 個 Function ,分別是 LTrim() 、 RTrim() 與 Trim() , LTrim() 只過濾前方, RTrim() 只過濾後方, Trim() 則會過濾前方與後方 ,要注意一下過濾字元是以字串的形式來傳遞,下方有個別運用的範例。
整體來說,實現的方法很簡單,甚至不用開 Function,也或許是因為如此所以不開介面出來,但我個人還是會開 Funciton 出來直接使用,畢竟我不是 C++ 專家,把 Funciton 開出來不僅程式碼看起來好懂也比較短。
參考資料
[ CSDN ] C++ string的trim, split方法[ cplusplus.com ] std::string
沒有留言:
張貼留言