프로그램의 매개변수로 들어오는 문자열이 어떤 건지 확인해서 문자열에 해당하는 문구를 출력하는 프로그램을 만들었다. 어떤 건지 확인하는 부분은 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;
}