공부/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;
}

 

반응형