새소식

언어/C++

c++ std::string::erase 정리 (c++ 문자열 지우기)

  • -

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가지를 특정 상황에 맞게 사용하면 될 것 같습니다

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.