Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++ 문자열 비교: 관계 연산자(==)와 std::string::compare()의 차이점


C++에서 문자열을 비교하는 방법은 크게 두 가지가 있습니다. 바로 관계 연산자(==)와 std::string::compare() 함수입니다. 흥미롭게도 이 둘 사이에는 단 하나의 차이점만 있는데, 그것은 바로 반환 값입니다. 내부적으로 string::operator==()string::compare()를 이용해 구현되어 있기 때문입니다.

관계 연산자(==)는 두 문자열이 같은지 여부만 알려주는 불리언(bool) 값을 반환합니다. 반면 compare()는 두 문자열이 서로 어떤 관계에 있는지를 나타내는 정수(int)를 반환합니다.

compare()의 반환 값은 다음과 같이 해석할 수 있습니다.

  • 0 : 두 문자열이 완전히 동일함
  • 음수 : 첫 번째 문자열이 두 번째 문자열보다 사전순으로 앞에 위치함
  • 양수 : 첫 번째 문자열이 두 번째 문자열보다 사전순으로 뒤에 위치함

사용 사례를 살펴보면, 두 문자열이 서로 다를 때 어느 쪽이 앞서는지(더 작은지 혹은 더 큰지)까지 알아야 한다면 compare()가 유용합니다. 예를 들어 정렬 알고리즘을 직접 구현하거나 사전식 순서를 비교해야 하는 상황에서 특히 유용하게 활용됩니다.

예제 코드

#include <iostream>
using namespace std;

int main() {
    string s1 = "Tutorials Point";
    string s2 = "Hello World";

    cout << (s1 == s2) << endl;      // 0 (false) : 두 문자열이 다름
    cout << s1.compare(s2) << endl;  // 양수 : 'T'가 'H'보다 큼
    cout << s2.compare(s1) << endl;  // 음수 : 'H'가 'T'보다 작음

    return 0;
}

실행 결과

0
12
-12

위 예제에서 s1 == s2는 두 문자열이 서로 다르므로 0(false)을 출력합니다. s1.compare(s2)는 가장 먼저 일치하지 않는 문자인 'T'와 'H'를 비교하여 'T'가 더 크기 때문에 양수를 반환하고, s2.compare(s1)은 그 반대이므로 음수를 반환합니다.

참고로 반환되는 정수의 절댓값은 C++ 표준에서 엄격하게 규정하지 않기 때문에 컴파일러 구현에 따라 달라질 수 있습니다. 따라서 실제 코드에서는 반환 값 자체보다는 부호(양수·음수·0)를 기준으로 판단하는 것이 안전합니다.