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

C++에서 대소문자를 구분하지 않고 문자열 비교하는 방법

C++ 표준 라이브러리는 문자열을 다루기 위한 다양한 기능을 제공합니다. 이 글에서는 두 개의 문자열이 동일한지 확인하는 방법을 살펴보겠습니다. 특히 대소문자 차이는 무시하고 비교하는 방법을 다룹니다.

핵심 로직은 매우 간단합니다. 두 문자열을 모두 소문자(또는 대문자)로 변환한 뒤 서로 비교하고, 그 결과를 반환하면 됩니다. 이렇게 하면 'Hello'와 'HELLO'처럼 대소문자만 다른 문자열도 같은 문자열로 판단할 수 있습니다.

여기서는 <algorithm> 헤더에 포함된 transform 함수를 사용하여 문자열 전체를 소문자로 변환했습니다.

입력 및 출력 예시

입력: 두 개의 문자열 "Hello WORLD"와 "heLLO worLD"
출력: Strings are same (문자열이 같음)

알고리즘

1단계: 두 개의 문자열 str1, str2를 입력받습니다.
2단계: str1과 str2를 소문자 형태로 변환합니다.
3단계: str1과 str2를 비교합니다.
4단계: 종료합니다.

예제 코드

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

int case_insensitive_match(string s1, string s2) {
    // s1과 s2를 소문자 문자열로 변환
    transform(s1.begin(), s1.end(), s1.begin(), ::tolower);
    transform(s2.begin(), s2.end(), s2.begin(), ::tolower);
    if(s1.compare(s2) == 0)
        return 1; // 두 문자열이 같음
    return 0; // 일치하지 않음
}

main() {
    string s1, s2;
    s1 = "Hello WORLD";
    s2 = "heLLO worLD";
    if(case_insensitive_match(s1, s2)) {
        cout << "Strings are same";
    } else {
        cout << "Strings are not same";
    }
}

실행 결과

Strings are same

코드 설명

case_insensitive_match 함수는 두 문자열을 매개변수로 받아 각각 transform::tolower를 사용해 모든 문자를 소문자로 바꿉니다. 이후 compare 함수로 두 문자열을 비교하여, 완전히 일치하면 1을, 그렇지 않으면 0을 반환합니다.

메인 함수에서는 대소문자가 섞여 있는 두 문자열("Hello WORLD", "heLLO worLD")을 준비한 뒤 위 함수를 호출합니다. 대소문자를 무시하기 때문에 두 문자열은 같은 것으로 판정되어 "Strings are same"이 출력됩니다.

참고 사항

이 방식은 ASCII 영문자에 대해서는 잘 작동하지만, 한글이나 기타 유니코드 문자가 포함된 경우에는 별도의 로케일(locale) 처리가 필요할 수 있습니다. 또한 C++11 이상 환경이라면 새 문자열을 생성하지 않고 원본을 보존하면서 비교하는 방법도 고려해볼 수 있습니다.