이전에 배웠던 find와 erase를 이용하면 쉽게 풀 수 있는 문제였다.
erase 함수는 다음과 같이 사용한다.
stringName.erase(index, wordSize);
이때 주의해야 하는 점은 find와 달리 해당 단어의 주소와 단어의 크기를 필요로 한다.는 것이다.
또한 반복문을 통해서 찾는 게 없을 때까지 반복해야 하는데, 반복을 갱신해주는 위치가 중요하기 때문에 주의하여야 한다.
위치가 잘못될 경우 갱신을 하지 못하고 삭제를 한번만 하는 오류가 생길 수 있으니 충분히 주의 하여야 한다.
코드는 다음과 같다.
#include <bits/stdc++.h>
using namespace std;
int main() {
string word, w; // 원래 단어와 찾을 단어
cin >> word >> w;
int idx = 0; // 기본 주소를 지정한다.
while ((idx = word.find(w)) != string::npos) {
// while문이 시작할 때 idx를 지정한다.
// find를 이용해 쓰레기값이 나올때까지(= 찾는 값이 없을 때)
word.erase(idx, w.size()); // 삭제 한다.
}
cout << word; // 출력
return 0;
}
이때, idx갱신을 while문의 안쪽으로 하게되면 제대로 갱신이 되지 않기 때문에 while문을 시작할 때, 갱신을 할 수 있도록 하였다.