본문 바로가기
코딩취미/C,C++

stricmp 와 strnicmp 차이점과 사용방법

by 브링블링 2023. 12. 6.
반응형

stricmp 와 strnicmp 차이점과 사용방법

stricmp (strcasecmp)

stricmp 함수는 C 언어의 표준 라이브러리 함수 중 하나로, 두 개의 문자열을 대소문자를 구별하지 않고 비교하는 역할을 합니다. stricmp 함수는 두 문자열이 동일하면 0을 반환하고, 첫 번째 문자열이 두 번째 문자열보다 사전적으로 작으면 음수를, 크면 양수를 반환합니다.

 

stricmp는 일부 특정 플랫폼이나 컴파일러에서 제공되는 확장 함수입니다. 대신, 표준 함수인 strcasecmp를 사용할 수 있는 경우가 많습니다.

int strcasecmp(const char *s1, const char *s2);
  • s1: 비교할 첫 번째 문자열의 포인터입니다.
  • s2: 비교할 두 번째 문자열의 포인터입니다.

strcasecmp 함수는 비교 결과에 따라 다음과 같은 값을 반환합니다:

  • 0: 두 문자열이 일치합니다.
  • 양수: s1이 s2보다 큽니다.
  • 음수: s1이 s2보다 작습니다.

만약 strcasecmp 함수를 사용할 수 없는 환경이라면, 특정 플랫폼에서 제공하는 stricmp 함수를 사용해야 합니다. 그러나 이 경우에는 표준이 아닌 확장 함수를 사용하게 되므로, 이식성을 고려해야 합니다.

 

아래 예제에서 str1str2는 서로 다른 문자열이지만 stricmp 함수를 사용하여 대소문자를 구분하지 않고 비교할 수 있습니다. 반환값인 result를 통해 비교 결과를 확인할 수 있습니다.

#include <cstring>

int main() {
    const char* str1 = "Hello";
    const char* str2 = "hello";

    int result = _stricmp(str1, str2);

    if (result == 0) {
        // 두 문자열이 동일한 경우
        std::cout << "두 문자열은 동일합니다." << std::endl;
    } else if (result < 0) {
        // 첫 번째 문자열이 사전적으로 작은 경우
        std::cout << "첫 번째 문자열이 두 번째 문자열보다 작습니다." << std::endl;
    } else {
        // 첫 번째 문자열이 사전적으로 큰 경우
        std::cout << "첫 번째 문자열이 두 번째 문자열보다 큽니다." << std::endl;
    }

    return 0;
}
반응형

strnicmp

strnicmp 함수는 C++이 아닌 C 언어의 표준 라이브러리 함수 중 하나입니다. C++에서는 strncasecmp 또는 strnicmp 대신에 strncasecmp 함수를 사용할 수 있습니다. 이 함수는 두 개의 문자열을 대소문자를 구분하지 않고 지정된 길이까지만 비교합니다.

int strnicmp(const char *s1, const char *s2, size_t n);
  • s1: 비교할 첫 번째 문자열의 포인터입니다.
  • s2: 비교할 두 번째 문자열의 포인터입니다.
  • n: 비교할 최대 문자 수입니다.

strnicmp 함수는 비교 결과에 따라 다음과 같은 값을 반환합니다:

  • 0: 두 문자열이 일치합니다.
  • 양수: s1이 s2보다 큽니다.
  • 음수: s1이 s2보다 작습니다.

주의: 이 함수는 표준이 아니므로, 특정 플랫폼이나 컴파일러에서만 제공될 수 있습니다. 만약 이 함수를 사용하려는 환경에서 제공하지 않는다면, 대체로 표준이 아닌 함수이지만 strncasecmp를 사용하여 비슷한 결과를 얻을 수 있을 것입니다.

사용 방법은 다음과 같습니다.

 

strncasecmp 함수를 사용하여 대소문자를 구분하지 않고 두 문자열의 처음 5글자를 비교하고 있습니다. 반환값은 result에 저장되며, 비교 결과를 확인할 수 있습니다.

#include <cstring>

int main() {
    const char* str1 = "Hello";
    const char* str2 = "hello";

    // 두 문자열의 처음 5글자를 대소문자를 구분하지 않고 비교
    int result = strncasecmp(str1, str2, 5);

    if (result == 0) {
        // 두 문자열의 처음 5글자가 동일한 경우
        std::cout << "두 문자열의 처음 5글자는 동일합니다." << std::endl;
    } else if (result < 0) {
        // 첫 번째 문자열의 처음 5글자가 사전적으로 작은 경우
        std::cout << "첫 번째 문자열의 처음 5글자가 두 번째 문자열보다 작습니다." << std::endl;
    } else {
        // 첫 번째 문자열의 처음 5글자가 사전적으로 큰 경우
        std::cout << "첫 번째 문자열의 처음 5글자가 두 번째 문자열보다 큽니다." << std::endl;
    }

    return 0;
}
반응형