본문 바로가기

programming/문제 해결

[C++, 코딩테스트] '인덱스'로 특정 문자 제거하기

반응형

1. 개요

 

 구현 문제단원을 풀어보는 과적엥서 문자를 찾아 지우는 erase()함수는 있어도, 인덱스를 기준으로 삭제해주는 함수가 없기에 만들어보면 유용할 것 같다는 생각이 들었다. 인덱스를 기준으로 문자 하나를 입력했을 때 해당 자리의 문자를 제거해주는 함수를 만들어 보았다.

 

2. 이론

 

 구현 이론은 간단하다. 해당 인덱스까지의 문자열을 자르고 그 뒤의 인덱스를 다시 잘라 기존 전자의 인덱스와 더해주면 된다.

 

3. 코드

 

- 인덱스 기준의 문자 제거 코드

 

string erase_char(string str, int index) {

	string buff;

	buff = str.substr(0, index);
	buff += str.substr(index + 1, str.size() - (index + 1));

	return buff;
}

 

 해당 코드를 보면 첫 buff변수에 substr() 메소드를 사용하여 문자열을 잘라 저장한다. 중요한점은 index를 시작기준에서부터의 거리인 두번째 인수로 사용했다는 점이다.

 

 두번째로 buff에 더해주는 substr() 에서는 제거할 인덱스의 바로 다음지점부터 전체 숫자에서 첫 buff에 더해진 문자열의 수를 빼주어 남아있는 문자열을 계산해 두번째 인덱스에 넣어준다. 다음은 test코드이다.

 

- 함수 Test

 

#include <iostream>
#include <string>

using namespace std;

string erase_char(string str, int index) {

	string buff;

	buff = str.substr(0, index);
	buff += str.substr(index + 1, str.size() - (index + 1));

	return buff;
}

int main(void) {

	string test = "abcdefg";

	for (int i = 0; i < test.size(); i++) {

		cout << erase_char(test, i) << endl;

	}

	return 0;

}

 

 다음은 실행 결과이다.



 

반응형