본문 바로가기
프로그래밍 언어/C++

C++ string compare 사용법

by Jo_Wick 2025. 10. 1.
반응형

string의 compare 함수는 두 문자열을 사전식(lexicographical)으로 비교하는 멤버 함수입니다.
즉, 사전 순서 기준으로 "작다/크다/같다"를 판단합니다.

 

// 1) 문자열 전체 비교
int compare(const std::string& str) const;

// 2) 부분 문자열과 비교
int compare(size_t pos, size_t count, const std::string& str) const;

// 3) 부분 문자열끼리 비교
int compare(size_t pos, size_t count,
            const std::string& str, size_t pos2, size_t count2) const;

// 4) C 문자열과 비교
int compare(const char* s) const;

// 5) C 문자열 일부와 비교
int compare(size_t pos, size_t count, const char* s) const;
int compare(size_t pos, size_t count, const char* s, size_t count2) const;

 

반환값 의미

  • 0 → 두 문자열이 같음
  • < 0 → *this 문자열이 작음 (사전순 앞)
  • > 0 → *this 문자열이 (사전순 뒤)

내부적으로는 strcmp와 같은 방식으로 동작한다고 보면 됩니다.
즉, 비교 도중 첫 번째로 다른 문자의 ASCII/유니코드 코드 값 차이를 반환.

 

기본 예제

#include <iostream>
#include <string>
using namespace std;

int main() {
    string a = "Apple";
    string b = "Banana";
    string c = "Apple";

    cout << a.compare(b) << endl; // 음수 (Apple < Banana)
    cout << b.compare(a) << endl; // 양수 (Banana > Apple)
    cout << a.compare(c) << endl; // 0     (같음)
}

 

부분 비교 예제

string s = "Hello World";

cout << s.compare(0, 5, "Hello") << endl; // 0 (앞 5글자가 "Hello")
cout << s.compare(6, 5, "World") << endl; // 0 (6번째부터 5글자가 "World")
cout << s.compare(0, 5, "Hellp") << endl; // 음수 ('o' < 'p')

 

부분 문자열 끼리 비교 예제

#include <iostream>
#include <string>
using namespace std;

int main() {
    string s1 = "HelloWorld";
    string s2 = "WorldHello";

    // s1의 "Hello"(0~4)와 s2의 "World"(0~4) 비교
    cout << s1.compare(0, 5, s2, 0, 5) << endl;  // "Hello" vs "World"

    // s1의 "World"(5~9)와 s2의 "World"(0~4) 비교
    cout << s1.compare(5, 5, s2, 0, 5) << endl;  // "World" vs "World"

    // s1의 "Hello"(0~4)와 s2의 "Hello"(5~9) 비교
    cout << s1.compare(0, 5, s2, 5, 5) << endl;  // "Hello" vs "Hello"
}

 

주의 사항

만약 비교하는 문자열 안에 대소문자가 섞여 있다면 제대로 된 결과가 나오지 않는다.

compare대소문자 구분(case-sensitive) 비교만 하기 때문에,
사람이 생각하는 “사전 순서(Apple < banana < Zoo)”와 다른 결과가 나올 수 있다.

 

  • compare는 문자 코드(ASCII/유니코드)만 단순 비교
  • ASCII에서는 대문자 'A'~'Z'(65~90)가 소문자 'a'~'z'(97~122)보다 항상 작음
  • 따라서 "Zoo" < "apple"이라는 직관과 어긋나는 결과가 발생
string s1 = "Apple";
string s2 = "banana";
string s3 = "Zoo";

cout << s1.compare(s2) << endl; // -1 ("Apple" < "banana", 코드값 기준 'A'=65 vs 'b'=98)
cout << s2.compare(s3) << endl; //  1 ("banana" > "Zoo", 코드값 기준 'b'=98 vs 'Z'=90)

 

 

  • 사람 기준: Apple < banana < Zoo
  • C++ compare 기준: Apple < Zoo < banana

 

반응형

댓글