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 함수를 사용해야 합니다. 그러나 이 경우에는 표준이 아닌 확장 함수를 사용하게 되므로, 이식성을 고려해야 합니다.
아래 예제에서 str1과 str2는 서로 다른 문자열이지만 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;
}
'코딩취미 > C,C++' 카테고리의 다른 글
[c언어] sizeof 와 ftell 의 차이점, 사용 목적 (0) | 2023.12.15 |
---|---|
[C언어] fopen 대신 fopen_s 를 사용하는 이유, 특징 정리 (0) | 2023.12.14 |
[C언어] C11 : ISO/IEC 9899:2011 특징과 내용 (0) | 2023.12.13 |
[MFC] CCmdUI 의 특징과 기능 (0) | 2023.12.13 |
vsnprintf 의 기능과 가변인자(va_list) 리스트 사용 방법 (0) | 2023.12.06 |