블로그는 나의 힘!

출처 : http://www.borlandforum.com/impboard/impboard.dll?action=read&db=cpp_tip&no=1


이번에 'STL Tutorial and Reference Guide, Second Editon' 번역판을 내신 
정승진님의 홈(http://oopsla.snu.ac.kr/~sjjung/stl/)에서 퍼온 것을 수정해서 올립니다. 


---------------------------------------------------------------------------------------- 

C++Builder(VCL)의 String(AnsiString), M$ VC++(MFC)의 CString, Java의 String 등을 보면 
Trim(), TrimLeft(), TrimRight() 등의 트리밍(문자열 좌우의 white space를 삭제) 함수들이 있습니다. 

그러나 단지 콘솔 프로그램에서 문자열 처리만을 위해서 덩치큰 VCL이나 MFC를 링크하는 건 문제가 있지요. 
STL의 string을 쓰는 것이 좋습니다. 
그런데, string(basic_string<char>)에는 애석하게도 그런 함수가 없습니다. 
다행히도 basic_string에는 find_first_not_of()와 find_last_not_of() 멤버함수가 있기 때문에 
트리밍을 손쉽게 구현할 수 있습니다. 


//--------------------------------------------------------------------------- 

#pragma hdrstop 
#include <iostream> 
#include <string> 

//--------------------------------------------------------------------------- 

#pragma argsused 
using namespace std; 

//string의 왼편의 white space를 trim하고 싶은 경우 
inline string trim_left(const string& str) 

    int n = str.find_first_not_of(" \t\v\n"); 
    return n == string::npos ? str : str.substr(n, str.length()); 


//string의 오른편의 white space를 trim하고 싶은 경우 
inline string trim_right(const string& str) 

    int n = str.find_last_not_of(" \t\v\n"); 
    return n == string::npos ? str : str.substr(0, n + 1); 


int main(int argc, char* argv[]) 

    string str_ltrim = "   hello"; 
    string str_rtrim = "hello     "; 
    string str_trim  = "   hello    "; 

    cout << trim_left(str_ltrim) << endl 
         << trim_right(str_rtrim) << endl 
         << trim_left(trim_right(str_trim)) << endl; 
    return 0; 

//--------------------------------------------------------------------------- 

 

 

Posted by Mister_Q