공부/C++
[C++] 문자열의 공백 제거하기
WSLim_97
2024. 1. 16. 17:20
반응형
C++ 문자열 공백을 remove, erase 함수를 사용해 제거하기
- 문자열에 존재하는 공백을 없애주기 위해 remove 함수와 erase 함수를 이용할 수 있다.
- 이때 remove와 erase를 동시에 사용하여 문자열 내의 모든 공백을 제거한다.
erase 함수
- 형태: erase(제거할 원소의 위치) or erase(문자열의 시작 위치, 문자열의 마지막 위치)
- erase 함수를 사용할 때 매개변수를 1개만 넘겨준다면 문자열의 특정 원소만 제거하는 것이고, 매개변수를 2개 넘겨준다면 문자열의 시작 위치와 마지막 위치 사이에 존재하는 모든 원소를 제거한다.
- 제거한 원소만큼 문자열의 크기가 작아진다.
+) 매개변수가 1개일 때
#include <iostream>
using namespace std;
int main()
{
string str = "H e l l o W o r l d";
cout << str << " 문자열의 크기: " << str.length() << endl;
//str 문자열의 첫 번째 문자 제거
str.erase(str.begin());
cout << str << " 문자열의 크기: " << str.length() << endl;
// str 문자열의 마지막 문자 제거
str.erase(str.end() - 1);
cout << str << " 문자열의 크기: " << str.length() << endl;
return 0;
}
+) 매개변수가 2개일 때
#include <iostream>
using namespace std;
int main()
{
string str = "H e l l o W o r l d";
cout << str << " 문자열의 크기: " << str.length() << endl;
// str 문자열의 시작과 끝 사이의 원소 제거
str.erase(str.begin(), str.end());
cout << str << " 문자열의 크기: " << str.length() << endl;
return 0;
}
remove 함수
- 형태: remove(문자열의 시작 위치, 문자열의 마지막 위치, 삭제할 값)
- 삭제할 값을 삭제한 뒤에 마지막 인덱스 + 1을 반환한다.
- algorithm 라이브러리에 존재한다. ( #include <algorithm>을 작성해야 한다. )
- remove 함수를 사용하면 삭제한 원소만큼 문자열의 크기가 작아지는 것이 아니라 크기는 작아지지 않고 삭제된 원소만큼 앞 인덱스에 덮어 씌우는 형태이다.
+) 예시
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
string str = "H e l l o W o r l d";
cout << str << " 문자열의 크기: " << str.length() << endl;
// remove 함수 사용 시 공백이 삭제가 되지만 문자열의 크기가 줄어들지는 않는다.
remove(str.begin(), str.end(), ' ');
cout << str << " 문자열의 크기: " << str.length() << endl;
return 0;
}
위 결과처럼 공백이 없어진 HelloWorld 문자가 앞쪽으로 옮겨가 덮어 씌우는 형태이다.
위 문제를 해결하기 위해 remove 함수와 erase 함수를 같이 사용하여 해결한다.
remove 함수와 erase 함수를 사용한 공백 제거
- remove 함수는 함수가 종료될 때 마지막 인덱스 + 1을 반환한다. 이 부분을 이용해 erase 함수와 같이 사용한다.
- 형태: erase( remove( 문자열의 시작 위치, 문자열의 마지막 위치, 삭제할 값), 문자열의 마지막 위치)
- remove가 문자열의 마지막 인덱스 + 1을 반환하기에 erase 함수를 사용해 반환된 인덱스 + 1인 11번째 인덱스인 W부터 마지막 위치까지 원소를 삭제하는 것이다.
+) 예시
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
string str = "H e l l o W o r l d";
cout << str << " 문자열의 크기: " << str.length() << endl;
// remove 함수와 erase 함수를 사용하여 문자열의 공백 제거
str.erase(remove(str.begin(), str.end(), ' '), str.end());
cout << str << " 문자열의 크기: " << str.length() << endl;
return 0;
}
반응형