strcmp() vs. strncmp() vs. int strncmp()
- strcmp()
strcmp 함수는 두 문자열을 비교하여 동일한지 여부를 확인한다
비교할 두 문자열이 완전히 동일하면 0을 반환하고,
첫 번째로 다른 문자의 ASCII 값에 따라 음수 또는 양수를 반환한다
- strncmp()
strncmp 함수는 두 문자열 중에서 처음부터 n개의 문자까지 만을 비교한다
두 문자열이 동일한 경우 0을 반환하고,
동일하지 않은 경우 두 문자열의 첫 번째 다른 문자의 ASCII 값에 따라 음수 또는 양수를 반환합니다.
strncmp은 주로 특정 길이만큼의 문자열을 비교할 때 사용된다
- int strncmp()
int strncmp은 반환 값이 int로 명시되어 있는 strncmp 함수이다
strncmp 함수를 호출할 때 반환 값을 직접 int 변수에 저장하는 것이 일반적이다
따라서, 별도로 int를 명시하지 않아도 된다
strcmp() 구현
문자열 비교시, ASCII를 기반으로 오름차순으로 비교한다
#include <stdio.h>
size_t my_strlen(const char* str);
int my_strcmp(const char* str1, const char* str2);
int main(void)
{
char str1[] = "Hello";
char str2[] = "yello";
char str3[] = "Hell";
printf("my_strcmp(str1, str2): %d\n", my_strcmp(str1, str2));
printf("my_strcmp(str1, str3): %d\n", my_strcmp(str1, str3));
printf("my_strcmp(str2, str3): %d\n", my_strcmp(str2, str3));
return 0;
}
size_t my_strlen(const char* str)
{
int i;
for (i = 0; *str++ != '\0'; ++i) {}
return i;
}
int my_strcmp(const char* str1, const char* str2)
{
size_t i;
size_t str1_len = my_strlen(str1);
size_t str2_len = my_strlen(str2);
size_t str_min_len = str1_len < str2_len ? str1_len : str2_len;
for (i = 0; i < str_min_len + 1; ++i) {
if (str1[i] != str2[i]) {
return str1[i] - str2[i];
}
}
return 0;
}
/* 개선된 버전
int my_strcmp(const char* str1, const char* str2)
{
// 두 문자 모두 '\0'가 아니다 && 같은 문자 -> 다음 문자 검사
// 그렇지 않으면 두 문자의 차를 반환
while (*str1 != '\0' && *str1 == *str2) {
// *str1이 '\0'가 아니다 && *str1 == *str2 라면,
// *str2도 '\0'가 아닐 수 밖에 없다
++str1;
++str2;
}
return *str1 - *str2;
}
*/
'C > [코드조선] C 핵심' 카테고리의 다른 글
[C] strcat(), strstr(), strtok() (0) | 2024.02.10 |
---|---|
[C] strcpy() (0) | 2024.02.09 |
[C] strlen() (0) | 2024.02.09 |
[C] 포인터 (0) | 2024.02.08 |
[C] 재귀 함수 (Resurcive Function) (0) | 2024.02.07 |