프로그램의 매개변수로 들어오는 문자열이 어떤 건지 확인해서 문자열에 해당하는 문구를 출력하는 프로그램을 만들었다. 어떤 건지 확인하는 부분은 compare 함수를 사용했고, 문구를 출력하는 부분은 if/else 대신 switch 구문을 사용해봤다.
int compare (const char* s);
위 신텍스를 str.compare(*s) 로 활용할 수 있다. str 과 s 이 같을 때 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(expression) {
case x:
a(); // code block
break;
case y:
b(); // code block
break;
default:
// code block
}
expression 의 값을 case 뒤의 값과 비교해서, 같은 게 있다면 해당 case 부터 코드를 실행하는 것이다. 같은 게 없다면 default 를 실행한다.
예를 들어 expression 이 x 였다면, case x: 에 해당하는 a()를 실행한다. 이때 x에 break; 가 있기 때문에 a() 만 실행하고 switch 문을 빠져나온다. 하지만 만약 x에 break; 가 없었다면, 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;
}