출처 : 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;
}
//---------------------------------------------------------------------------
[출처] [STL]string에서의 trim() 구현|작성자 핵이
'[ Programing ] > STL & Booster' 카테고리의 다른 글
STL Debug 모드 에서 속도 난감할때.. (0) | 2013.05.21 |
---|---|
bitset (0) | 2013.05.21 |
[STL] list 옵션 sort() (0) | 2011.10.10 |
[STL] member map (0) | 2011.07.20 |
[STL] std::pair< template T1, template T2 > 설명 및 활용. (중복 데이터 체크) (0) | 2011.07.08 |