묻공러
[C] strcmp()
묻공러
묻지마공부
묻공러
전체
오늘
어제
  • 분류 전체보기 (500) N
    • C (54)
      • [코드조선] C 핵심 (35)
      • [언어본색] C 기초 (19)
    • C++ (72)
      • [루키스] C++ (9)
      • [루키스] 콜백함수 (6)
      • [루키스] STL (8)
      • [루키스] Modern C++ (11)
      • [노코프] C++ (10)
      • [노코프] Tips (16)
      • [일지] C++ (12)
    • C# (10) N
      • [루키스] C# (9) N
      • [루키스] 자료구조 (1) N
      • [루키스] 실전 문법 (0)
    • 자료구조 & 알고리즘 (50)
      • [코드조선] C 자료구조 & 알고리즘 (6)
      • [합격자되기] C++ 코딩테스트 (12)
      • [루키스] C++ 자료구조 & 알고리즘 (32)
    • CS (69)
      • [널널한 개발자] CS 개론 (19)
      • [혼자 공부하는] 컴퓨터 구조 (16)
      • [혼자 공부하는] 운영체제 (18)
      • [널널한 개발자] 네트워크 (16)
    • 게임 그래픽스 (46)
      • [전북대] OpenGL (25)
      • [일지] DirectX (21)
    • 게임 엔진 - 언리얼 (123)
      • [코드조선] 언리얼 (53)
      • [코드조선] 언리얼 데디서버 (8)
      • [일지] 언리얼 (59)
      • [일지] 언리얼 (2) (3)
    • 게임 엔진 - 유니티 (4) N
      • 유니티 (4) N
    • 게임 서버 (17)
    • 게임 수학 & 물리 (19)
      • 게임 수학 (12)
      • 게임 물리 (7)
    • GIT & GITHUB (4)
    • 영어 (18)
      • [The Outfit] 대본 공부 (11)
      • the others (7)
    • 그 외 (14)
      • In (5)
      • Out (5)
      • Review (4)

인기 글

최근 글

hELLO · Designed By 정상우.
C/[코드조선] C 핵심

[C] strcmp()

2024. 2. 9. 23:31

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
'C/[코드조선] C 핵심' 카테고리의 다른 글
  • [C] strcat(), strstr(), strtok()
  • [C] strcpy()
  • [C] strlen()
  • [C] 포인터
묻공러
묻공러
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.