[C++] 사용한 함수 및 구문 간단 정리(4)

😎·2022년 12월 18일
0

CPP

목록 보기
19/46

프로그램의 매개변수로 들어오는 문자열이 어떤 건지 확인해서 문자열에 해당하는 문구를 출력하는 프로그램을 만들었다. 어떤 건지 확인하는 부분은 compare 함수를 사용했고, 문구를 출력하는 부분은 if/else 대신 switch 구문을 사용해봤다.

compare 함수

int compare (const char* s);

위 신텍스를 str.compare(*s) 로 활용할 수 있다. strs 이 같을 때 0 을 반환한다. 그래서 같을 때는 !(not) 을 사용해서 조건을 실행하도록 코드를 작성했다.

void Harl::complainFilter(std::string level) {
  std::string levels[4] = {"DEBUG", "INFO", "WARNING", "ERROR"};
  int         index = 0;
  
  while (index < 4) {
    if (!level.compare(levels[index])) {
      break;
    }
    index++;
  }
	...
}

switch 구문

switch 문의 기본적인 신택스는 다음과 같다.

switch(expression) {
  case x:
    a(); // code block
    break;
  case y:
    b(); // code block
    break;
  default:
    // code block
}

expression 의 값을 case 뒤의 값과 비교해서, 같은 게 있다면 해당 case 부터 코드를 실행하는 것이다. 같은 게 없다면 default 를 실행한다.

예를 들어 expressionx 였다면, case x: 에 해당하는 a()를 실행한다. 이때 xbreak; 가 있기 때문에 a() 만 실행하고 switch 문을 빠져나온다. 하지만 만약 xbreak; 가 없었다면, b() 까지 실행하게 된다. 즉, break 또는 default 를 만나기 전까지 코드를 실행한다.

문구를 출력하는 기능은 compare 함수를 통해 얻은 index 를 활용해서 switch case 구문을 만들어 해결했다.

void Harl::complainFilter(std::string level) {
	...
  switch (index) {
    case 0:
      Harl::complain("DEBUG");
    case 1:
      Harl::complain("INFO");
    case 2:
      Harl::complain("WARNING");
    case 3:
      Harl::complain("ERROR");
      break;
    default:
      std::cout << "[ Probably complaining about insignificant problems ]"
                << std::endl;
  }
  return;
}

참고자료

profile
jaekim

0개의 댓글