C++ 관계 연산자
목차
값에 대한 비교를 하기위해 관계 연산자(relational operator)를 사용할 수 있습니다.
값이란 데이터를 말하는 것 입니다. 그런데 데이터형은 다양하기 때문에 비교관계도 다양할 수 밖에 없습니다.
C++에서는 우리가 산수적으로 알고 있는 크다 작다 같다 연산자를 사용하여 비교할 수 있습니다.
관계 연산자를 예제로 사용해 보겠습니다.
#include <iostream> using namespace std; int main() { int num1 = 3; int num2 = 0; int num3 = 5; cout << "\n[----- less than < ----]" << endl; for (int i = 0; i < num1; i++) { cout << i << " is less than " << num1 << endl; } cout << "\n[----- greater than < ----]" << endl; for (int i = 3 ; i > num2; i--) { cout << i << " is greater than " << num2 << endl; } cout << "\n[----- equal to == ----]" << endl; for (int i = 0 ; i < num3; i++) { cout << i << " is less than " << num3 << endl; if(i == num1) cout << i << " is equal to " << num1 << endl; } return 0; }
[----- less than < ----] 0 is less than 3 1 is less than 3 2 is less than 3 [----- greater than < ----] 3 is greater than 0 2 is greater than 0 1 is greater than 0 [----- equal to == ----] 0 is less than 5 1 is less than 5 2 is less than 5 3 is less than 5 3 is equal to 3 4 is less than 5
for 문의 조건식에서 사용합니다. for문에서는 조건식이 거짓(False)이 될 때까지 실행하므로 매번 실행 결과를 확인할 수 있습니다.
기본적인 것들은 중학교 수학 기초에서 배웠던 것들 입니다. 크다 작다 같다 아니다 정도를 비교할 수 있으면 충분합니다.
(a < b) a는 b보다 작다. (a==b) a는 b와 같다. (a > b) a는 b보다 크다.
== 는 ‘와 같다’ 입니다. = 는 할당 연산자(assignment statement)로 차이가 있습니다.
관계 연산자(relational operator)
관계 연산자는 두 피연산자의 관계를 비교해서 참이면 true 거짓은 false 값을 리턴합니다.
연산자 | 내용 |
---|---|
a < b | a는 b보다 작다 |
a <= b | a는 b보다 작거나 같다 |
a == b | a는 b와 같다 |
a > b | a는 b보다 크다 |
a >= b | a는 b보다 크거나 같다 |
a != b | a는 b와 같지 않다 |
관계 연산자도 하나의 값을 리턴하는 표현식입니다. a < b 지만 (10-5) < (7+6) 과 같이 식이 들어갈 수도 있고 함수의 반환값이 들어갈 수도 있습니다.
식이 종료되고 반환되는 bool 값을 잘 사용할 줄 알아야 합니다.
strcmp 문자열 비교 함수
C스타일 문자열 비교함수를 사용하여 보겠습니다. for 문에서 조건식에 0이 아닌 값은 true 로 해석됩니다.
이것을 이용하면 함수의 반환값을 루프의 조건으로 사용할 수 있습니다. strcmp () 를 사용하면 문자열이 같지 않으면 true 같으면 false 를 사용합니다. 즉 문자열을 찾을 때 false로 종료하도록 만들어진 함수입니다.
조건 검사 표현식에 isOkay() isSomething() 처럼 사용하는 것은 프로그래머들의 전통입니다.
a < 10 와 같은 표현식도 좋지만 함수를 사용하면 의미가 명확해지고 재사용이 가능하다는 장점이 있습니다.
#include <iostream> #include <cstring> using namespace std; int main() { char word[5] = "?iwi"; for (char ch = 'a'; strcmp(word, "kiwi"); ch++) { cout << word; cout << " => " << strcmp(word, "kiwi") << endl; word[0] = ch; } cout << "after finishing loop -> " << word << endl; return 0; }
?iwi => -1 aiwi => -1 biwi => -1 ciwi => -1 diwi => -1 eiwi => -1 fiwi => -1 giwi => -1 hiwi => -1 iiwi => -1 jiwi => -1 after finishing loop -> kiwi
C++ string 클래스 문자열 비교
string 객체를 사용한 문자열 비교가 훨씬 직관적이고 C++ 을 사용하면 이쪽을 쓰게 될 것입니다.
word != “kiwi” 는 관계연산자 오버로딩을 통해서 문자열이 같으면 0을 다르면 1을 반환하도록 설계되있습니다. 즉 문자열이 같을 때까지 for 루프를 돌릴 수 있습니다.
#include <iostream> #include <cstring> using namespace std; int main() { string word = "?iwi"; for (char ch = 'a'; word != "kiwi"; ch++) { cout << word; cout << " => " << (word != "kiwi") << endl; word[0] = ch; } cout << "after finishing loop -> " << word << endl; return 0; }
?iwi => 1 aiwi => 1 biwi => 1 ciwi => 1 diwi => 1 eiwi => 1 fiwi => 1 giwi => 1 hiwi => 1 iiwi => 1 jiwi => 1 after finishing loop -> kiwi
문자열을 비교하는 루프는 카운팅 루프가 아닙니다. for 보다는 while에 더 어울리는 문법일지 모르겠습니다. 다만 for 문의 조건 검사 표현식을 함수가 대체할 수 있다는 것은 하나의 응용방법입니다.
요약
C++ 관계 연산자에 대해서 알아봤습니다.
표현식에서 사용하는 방법들은 여러가지가 있으니 개념을 잘 잡도록 합니다.
참고문서
C++ Relational and Logical Operators (With Examples)
C++ Relational Operators – Tutorialspoint
you are in reality a excellent webmaster. The website loading velocity is incredible.
It seems that you’re doing any unique trick. In addition, The contents are masterwork.
you’ve performed a great process on this matter!