패턴에 일치하는 문자 삭제

C++:
패턴에 일치하는 문자 삭제

How to: (방법)

C++에서는 <algorithm> 헤더에 있는 erase()remove_if() 함수를 이용해서 문자 패턴을 삭제할 수 있습니다. 다음 예제 코드와 출력을 확인해 보세요.

#include <iostream>
#include <string>
#include <algorithm>

int main() {
    std::string data = "안녕하세요123, C++ 프로그래밍!";

    // 숫자를 제거합니다.
    data.erase(std::remove_if(data.begin(), data.end(), ::isdigit), data.end());
    std::cout << data << std::endl;

    return 0;
}

출력:

안녕하세요, C++ 프로그래밍!

Deep Dive (심층 탐구)

이전의 C++에서는 문자열 조작을 위해 자체 루프를 작성하는 것이 일반적이었습니다. 하지만, C++11부터는 람다 표현식과 함께 std::remove_if() 함수를 사용하여 코드를 간결하게 만들 수 있게 되었습니다. 예를 들어, 람다를 사용하여 위의 예제에서 숫자를 제거하는 코드는 다음과 같습니다:

data.erase(std::remove_if(data.begin(), data.end(),
                          [](unsigned char c) { return std::isdigit(c); }),
           data.end());

std::remove_if()는 조건과 매치되는 모든 원소를 sequence의 끝으로 이동시키고, 새 sequence의 끝을 가리키는 iterator를 반환합니다. 그런 다음 erase()를 사용하여 매치된 원소를 실제로 제거합니다.

또 다른 대안으로는 정규 표현식을 사용하는 방법이 있습니다. <regex> 헤더 파일을 포함시키고 std::regex를 사용하여 복잡한 패턴의 문자열도 쉽게 삭제할 수 있습니다.

See Also (참고 자료)