c++ 에서는 string의 erase 함수를 이용하여 문자를 지울 수 있습니다
지우는 방법이 한 가지가 아니므로 모두 익혀두면 코딩 테스트시 도움이 될 수 있을 것 같아 정리해보았습니다
https://www.cplusplus.com/reference/string/string/erase/ 을 바탕으로 정리하였습니다
string::erase
string으로 부터 특정부분을 지우는 멤버 함수이며
이 함수를 이용하는 방법에는 총 3가지 방법이 있으며 인자에 따라 다르게 작동합니다
1. sequence
특정 위치에서 특정 길이만큼 문자를 지울 수 있습니다
string& erase (size_t pos = 0, size_t len = npos);
pos 위치 부터 길이 len 만큼 지울 수 있습니다
pos의 위치는 0부터 시작하며 길이는 시작 위치 포함 길이만큼 입니다.
아래 예제 코드를 보면 바로 이해할 수 있습니다
예시 코드
// 1. sequence
string str1 = "Erase string Test";
cout << "Before: " << str1 << endl; // Before: Erase string Test
str1.erase(0, 6);
cout << "After: " << str1 << endl; // After: string Test
2. character
iterator erase (const_iterator p);
character 포인터 p를 이용해 지울 수 있습니다
p는 제거할 문자의 반복자를 나타냅니다
즉 이 형태는 특정 위치의 문자를 지울 수 있습니다.
예시 코드
// 2. character
string str2 = "Erase string Test";
cout << "Before: " << str2 << endl; // Before: Erase string Test
str2.erase(str2.begin());
cout << "After: " << str2 << endl; // After: rase string Test
cout << "Before: " << str2 << endl; // Before: rase string Test
str2.erase(str2.begin() + 5);
cout << "After: " << str2 << endl; // After: rase tring Test
begin 멤버함수를 통해 시작 위치를 나타내는 iterator를 이용해서
첫 글자를 지워 봤습니다.
응용하자면, 6번째 글자를 지우고 싶다면 str.begin() + 5를 인자로 넘겨서 지울 수 있습니다. (begin이 첫 번째 위치를 나타내므로 5만 더함)
3. range
말 그대로 범위를 지정해서 문자를 제거할 수 있습니다.
constructor 형태는 다음과 같습니다
iterator erase (const_iterator first, const_iterator last);
이도 iterator를 이용해서 범위를 지정해 지울 수 있습니다
범위는 [first,last) 를 지웁니다. 즉 last index 는 지우지 않습니다
예시 코드
다음과 같이 사용할 수 있습니다
// 3. range
string str3 = "Erase string Test";
cout << "Before: " << str3 << endl; // Erase string Test
str3.erase(str3.begin(), str3.begin() + 6);
cout << "After: " << str3 << endl; // string Test
[begin(), begin()+6) 이므로
begin은 'E'의 위치, begin()+6은 's' 위치 이므로 s 이전인 공백(space)까지 제거하게 됩니다
이렇게 c++ string의 erase 멤버 함수에 대해서 알아보았습니다!!
3가지를 특정 상황에 맞게 사용하면 될 것 같습니다