[C++] 사용한 함수 간단 정리(1)

😎·2022년 12월 6일
0

CPP

목록 보기
12/46

42 서울에서 드디어 새로운 언어를 공부하기 시작했다. 이전까지는 C 로만 프로그래밍을 했었는데, 드디어 C++ 다!

42서울에서 제공하는 과제를 해석해보니, 원하는 기능을 구현하고 싶다면 직접 만들기보다 라이브러리를 이용하라는 말이 있었다. C 과제를 할 때는 문자열과 관련된 기본 함수들을 거의 다 직접 구현해야 했어서 번거로웠는데, 참으로 반가운 일이었다.

과제를 진행하며 알게 되는 C++ 함수들을 간단하게 정리해보자.

erase 함수

해당 함수를 통해 문자열에서 원하는 문자를 지울 수 있다. 구문은 다음과 같다.

erase(size_t __pos, size_t __n)

첫 번째 인자에는 시작 위치가 들어가고, 두 번째 인자에는 지울 크기가 들어간다.
나는 다음과 같이 사용했다. 문자열의 앞 뒤에 있는 화이트 스페이스를 지워야하는 상황이었다.
예를 들어 cmd = "(1. 화이트 스페이스) + abc + (2. 화이트 스페이스)" 이라는 문자열이 있다고 생각하자.

...

// 0번째부터, 화이트 스페이스가 아닌 문자까지 삭제. [(1) 부터 a 전까지]
1) cmd.erase(0, cmd.find_first_not_of(" \t\v\f\r"));

// 문자열의 끝이 화이트 스페이스인지 확인 [(2)확인]
2) while (isspace(cmd[cmd.length() - 1]))
   {
		// 문자열에서 화이트 스페이스가 아닌 마지막 문자부터 끝까지 삭제. [(2) 부터 마지막까지]
	2-1) cmd.erase(cmd.find_last_not_of(" \t\v\f\r") + 1, cmd[cmd.length() - 1]);
   }
    
...

cmd[cmd.length() - 1]cmd 문자열 전체 길이를 말하므로 길이가 10이라고 한다면, 10번째까지 삭제하는 코드를 작성했다고 볼 수 있다.


find_first_not_of 함수와 find_last_not_of 함수

해당 함수는 시작과 끝에 반복되는 문자를 지울 때 유용하게 사용할 수 있다. 예를 들어 cmd = "000042" 라는 문자열에서 앞에 '0' 4개를 지우고 싶다면, cmd.find_first_not_of('0') 과 같은 방식으로 코드를 짤 수 있다. 이렇게 하면 cmd42 로 바뀐다. 뒤에서부터 지우고는 방법도 동일하다.

erase 함수 설명에서 볼 수 있듯이 나는 화이트 스페이스를 지우는데 활용했다. 신기한 것은 여러개의 문자를 나열해도 모두 지워준다는 것이다. 내부적으로 문자를 하나씩 돌아가며 삭제하는 듯하다.

// 0번째부터, 화이트 스페이스가 아닌 문자까지 삭제. [(1) 부터 a 전까지]
cmd.erase(0, cmd.find_first_not_of(" \t\v\f\r"));

// 문자열에서 화이트 스페이스가 아닌 마지막 문자부터 끝까지 삭제. [(2) 부터 마지막까지]
cmd.erase(cmd.find_last_not_of(" \t\v\f\r") + 1, cmd[cmd.length() - 1]);

isspace 함수

문자열의 특정 위치가 화이트 스페이스인지 확인하고 싶을 때 사용한다. 공백이라면 0이 아닌 수를 반환하고, 공백이 아니라면 0 반환한다.

isspace가 공백이라고 판단하는 것들은 아래와 같다.

  • " " = 공백(스페이스)
  • "\n" = 개행
  • "\t" = 수평 탭
  • "\v" = 수직 탭
  • "\f" = 피드
  • "\r" = 캐리지 리턴

위 코드에서 문자열의 마지막에 화이트가 있는지 확인하고, 있다면 find_last_not_of 함수와 erase 함수로 화이트 스페이스를 지웠다.

while (isspace(cmd[cmd.length() - 1]))
{
    cmd.erase(cmd.find_last_not_of(" \t\v\f\r") + 1, cmd[cmd.length() - 1]);
}

length 함수

문자열의 길이를 구할 때 사용한다. 매우 간단하게 사용할 수 있다.
cmd = "hello" 이고 cmd 의 길이를 구하고 싶다면,

cmd.length();

로 구할 수 있고, 사이즈 5 가 반환된다.

profile
jaekim

0개의 댓글