STL에서 문자열 트림 (string trim)하기
Writer: http://ospace.tistory.com/ (ospace114@empal.com) 2008.08.13
아래 코드는 timebird님의 코드를 약간 수정하였다. 좀더 간편하고 축약하였다.
namespace를 정해준 것은 동일 이름의 함수가 겹칠수 있기에 네임스페이스를 사용했다.
아래 경우는 기본 공배를 제거해주는 기능과 원하는 문자를 제거해주는 방법을 사용할 수 있다.
#define TRIM\_SPACE " \\t\\n\\v"
namespace ospace {
inline std::string trim(std::string& s,const std::string& drop = TRIM_SPACE)
{
std::string r=s.erase(s.find_last_not_of(drop)+1);
return r.erase(0,r.find_first_not_of(drop));
}
inline std::string rtrim(std::string s,const std::string& drop = TRIM_SPACE)
{
return s.erase(s.find_last_not_of(drop)+1);
}
inline std::string ltrim(std::string s,const std::string& drop = TRIM_SPACE)
{
return s.erase(0,s.find_first_not_of(drop));
}
}
아래는 이를 사용한 예제 코드이다.
using std::string;
using ospace::trim;
using ospace::ltrim;
using ospace::rtrim;
string msg1(" msg");
string msg2("msg ");
string msg3(" msg ");
string msg4("_____msg_____");
string msg5("++--msg++-+-");
using std::cout;
using std::endl;
cout << msg1 <<"==>" << rtrim(msg1) << endl;
cout << msg1 <<"==>" << ltrim(msg1) << endl;
cout << msg1 <<"==>" << trim(msg1) << endl;
cout << msg2 <<"==>" << rtrim(msg2) << endl;
cout << msg2 <<"==>" << ltrim(msg2) << endl;
cout << msg2 <<"==>" << trim(msg2) << endl;
cout << msg3 <<"==>" << rtrim(msg3) << endl;
cout << msg3 <<"==>" << ltrim(msg3) << endl;
cout << msg3 <<"==>" << trim(msg3) << endl;
cout << msg4 <<"==>" << rtrim(msg4, "-") << endl;
cout << msg4 <<"==>" << ltrim(msg4, "-") << endl;
cout << msg4 <<"==>" << trim(msg4, "_") << endl;
cout << msg5 <<"==>" << rtrim(msg5, "-") << endl;
cout << msg5 <<"==>" << ltrim(msg5, "-") << endl;
cout << msg5 <<"==>" << trim(msg5, "-") << endl;
cout << msg5 <<"==>" << rtrim(msg5, "+-") << endl;
cout << msg5 <<"==>" << ltrim(msg5, "+-") << endl;
cout << msg5 <<"==>" << trim(msg5, "+-") << endl;
결과 그림과 비교하면 쉽게 알 수 있을 것이다.
우의 msg1과 msg2 등에는 탭키도 넣었다.
참조
반응형
'3.구현 > C or C++' 카테고리의 다른 글
Morden Programming의 Functor (0) | 2009.03.08 |
---|---|
전처리(preprocess) 중간 결과 확인하기 (2) | 2008.09.23 |
함수호출 규약 (0) | 2007.06.18 |
Metaprogramming (0) | 2007.02.16 |
[패턴] Command (0) | 2007.02.16 |