C++에서 두 문자열(string) 객체를 비교하는 방법을 알아보겠습니다. C++에는 편리한 string 클래스가 있으며, 표준 라이브러리에서는 문자열을 비교할 수 있는 compare() 함수도 제공합니다. 하지만 이번 글에서는 ==, !=, <, >, <=, >=와 같은 관계 연산자를 직접 사용해 보겠습니다.
이 연산자들은 문자열 전체를 한 번에 처리하는 것이 아니라, 앞에서부터 한 문자씩 순서대로 비교합니다. 각 문자의 값(아스키 코드 기준)이 같으면 다음 문자로 넘어가고, 처음으로 다른 문자가 나타나는 지점에서 대소 관계가 결정됩니다.
예제 코드
#include<iostream>
using namespace std;
void compareStrings(string s1, string s2) {
if (s1 != s2)
cout << s1 << " is not equal to "<< s2 << endl;
else if(s1 == s2)
cout << "Strings are equal";
if (s1 > s2)
cout << s1 << " is greater than "<< s2 << endl;
else if(s1 < s2)
cout << s2 << " is greater than "<< s1 << endl;
}
int main() {
string s1("hello");
string s2("helLo");
compareStrings(s1, s2);
}
실행 결과
hello is not equal to helLo hello is greater than helLo
결과 분석
s1은 "hello", s2는 "helLo"입니다. 두 문자열은 세 번째 문자까지는 동일하지만, 네 번째 문자에서 소문자 'l'(아스키 코드 108)과 대문자 'L'(아스키 코드 76)이 서로 다릅니다. 소문자가 대문자보다 아스키 코드 값이 크기 때문에, "hello"가 "helLo"보다 크다고 판정되는 것입니다.
이처럼 C++의 관계 연산자는 대소문자를 구분하며 사전순(lexicographical)으로 문자열을 비교합니다. 따라서 대소문자 구분 없이 비교하고 싶다면, 비교 전에 toupper() 또는 tolower() 등으로 문자열을 정규화하거나, 대소문자를 무시하는 별도의 비교 함수를 사용하는 것이 좋습니다.