Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++에서 std::string 앞뒤 공백 제거(Trim)하는 가장 좋은 방법

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처럼 간단히 컴파일할 수 있습니다.