이 글에서는 C++에서 문자열로부터 특정 문자를 제거하는 방법을 살펴보겠습니다. C++에서는 표준 라이브러리의 erase() 함수와 remove() 함수를 함께 사용하면 이 작업을 아주 간단하게 처리할 수 있습니다. remove() 함수는 문자열의 시작 주소와 끝 주소, 그리고 제거하고 싶은 문자를 인자로 받아 해당 문자를 걸러내는 역할을 합니다.
입력: 문자열 "ABAABACCABA" 출력: "BBCCB"
알고리즘
1단계: 문자열을 준비합니다 2단계: remove() 함수를 사용하여 특정 문자가 나타나는 모든 부분을 제거합니다 3단계: 결과를 출력합니다 4단계: 종료
예제 코드
#include<iostream>
#include<algorithm>
using namespace std;
main() {
string my_str = "ABAABACCABA";
cout << "Initial string: " << my_str << endl;
my_str.erase(remove(my_str.begin(), my_str.end(), 'A'), my_str.end()); // 문자열에서 'A' 제거
cout << "Final string: " << my_str;
}실행 결과
Initial string: ABAABACCABA Final string: BBCCB
동작 원리 이해하기
위 코드에서 remove() 함수는 실제로 문자열의 크기를 줄이지 않습니다. 대신 제거되지 않은 문자들을 앞쪽으로 모으고, 그 뒤에 남은 불필요한 영역의 시작 위치(논리적인 새로운 끝)를 가리키는 반복자를 반환합니다. 따라서 반환된 반복자부터 문자열의 실제 끝(my_str.end())까지의 구간을 erase() 함수로 잘라내야 비로소 문자가 완전히 삭제됩니다.
이처럼 remove()와 erase()를 조합하는 패턴은 C++에서 널리 쓰이는 관용구로, erase-remove 관용구(erasure-remove idiom)라고 불립니다. 이 방식은 특정 문자뿐만 아니라 조건에 맞는 여러 문자나 요소를 한 번에 제거할 때도 활용할 수 있어 매우 유용합니다.