C++에서 문자열 공백 제거하기
문자열 트리밍(trim)이란 문자열의 왼쪽과 오른쪽 끝에 있는 불필요한 공백(whitespace)을 제거하는 작업을 의미합니다. 사용자 입력을 처리하거나 외부 데이터를 파싱할 때 앞뒤 공백 때문에 원치 않는 오류가 발생할 수 있으므로, 문자열을 다루는 프로그램에서 자주 필요한 작업입니다.
안타깝게도 C++ 표준 라이브러리의 std::string에는 문자열 자르기 기능이 기본적으로 포함되어 있지 않습니다. 따라서 가장 널리 쓰이고 편리한 방법은 Boost 문자열 알고리즘 라이브러리를 활용하는 것입니다. 이 라이브러리는 trim_left()와 trim_right()라는 두 가지 함수를 제공하며, 양쪽 공백을 한 번에 제거하고 싶다면 두 함수를 연달아 호출하거나 trim() 함수 하나만 사용하면 됩니다.
예제 코드
#include<iostream>
#include<boost/algorithm/string.hpp>
using namespace std;
main(){
string myStr = " This is a string ";
cout << "The string is: (" << myStr << ")" << endl;
// 오른쪽 공백 제거
boost::trim_right(myStr);
cout << "The string is: (" << myStr << ")" << endl;
// 왼쪽 공백 제거
boost::trim_left(myStr);
cout << "The string is: (" << myStr << ")" << endl;
}실행 결과
$ g++ test.cpp $ ./a.out The string is: ( This is a string ) The string is: ( This is a string) The string is: (This is a string) $
코드 설명
위 예제의 동작 순서는 다음과 같습니다.
1. 처음 문자열 myStr은 앞뒤 모두에 공백이 포함되어 있습니다.
2. boost::trim_right(myStr)을 호출하면 문자열 오른쪽 끝의 공백만 제거됩니다.
3. 이어서 boost::trim_left(myStr)을 호출하면 왼쪽 끝의 공백까지 제거되어 최종적으로 깔끔한 문자열이 됩니다.
참고로 이 함수들은 인자로 전달된 문자열을 직접 수정(in-place)합니다. 원본을 유지하고 싶다면 반환값을 활용하는 boost::trim_copy(), boost::trim_left_copy(), boost::trim_right_copy() 함수를 사용하는 것이 좋습니다.
컴파일 시 주의사항
Boost는 외부 라이브러리이므로 시스템에 설치되어 있어야 합니다. Ubuntu 계열에서는 sudo apt install libboost-all-dev 명령으로 설치할 수 있으며, 헤더 전용(header-only) 라이브러리 영역에 속하기 때문에 별도의 링크 옵션 없이 g++ test.cpp처럼 간단히 컴파일할 수 있습니다.