2019年12月16日 星期一

關於 C++ 的 Trim() 實現

關於 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

沒有留言:

張貼留言