본문 바로가기

3.구현/C or C++

STL에서 문자열 트림 (string trim)하기

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 등에는 탭키도 넣었다.

참조

[1] http://timebird.egloos.com/2759633

반응형

'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