[C/C++] 문자열 비교 함수 strcmp, strncmp 사용 방법 예제모음

코딩을 하다보면 두 문자열의 값이 같은지 확인해야할 때가 많습니다.

따라서 본 포스팅에서는 C 와 C++ 에서 모두 사용가능한 문자열 비교 함수 strcmp 와 strncmp 에 대해 다루어 보겠습니다.

c 파일에서 사용하는 경우,

#include <string.h>

c++ 파일에서 사용하는 경우,

#include <cstring>

*헤더파일만 다르고 함수의 사용방법은 동일합니다.

본 포스팅 예제들은 C++로 작성하였습니다.

strcmp strncmp 함수 구문

구문은 다음과 같습니다.

int strcmp(const char *str1, const char *str2);
int strncmp(const char *str1, const char *str2, size_t n);

작동 원리

1. str1과 str2 비교하는 두 문자열의 첫번째 문자들부터 비교를 시작합니다.
(문자들의 아스키코드 값을 비교)

2. 문자가 같다면 그 다음번째 자리의 문자들을 비교합니다.

3. 문자가 다르거나 문자열이 같다면 함수 실행이 끝납니다.

strcmp vs strncmp 차이

str1 과 str2 는 비교할 두 문자열을 의미하고, strcmp와 strncmp 함수 둘 다 공통적으로 받는 매개변수입니다.

하지만 strncmp는 추가적으로 n 이라는 값을 세번째 인자로 받습니다.

size_t 자료형인 n 은 두 문자열을 비교할때 원하는 일정 길이까지만 비교하게끔 하는 문자 비교개수를 의미합니다. (size_t는 unsigned int와 같습니다.)

strcmp, strncmp 반환값

strcmp: 두 문자열 str1 과 str2가 같으면 0을 반환합니다.

strncmp: 두 문자열 str1 과 str2가 n번째까지 같으면 0을 반환합니다.

두 함수 모두 str1과 str2가 같지 않은 경우, 같지 않기 시작한 문자들의 아스키코드 값의 차이를 나타내는 정수값을 반환합니다.

첫 번째 문자열인 str1의 아스키코드 값에서 str2의 아스키코드 값을 빼기 때문에 str1이 더 큰 경우 양수를, str2가 더 큰 경우 음수를 반환합니다.

문자열 비교 함수 반환값 예제

위 예시에서 str1: “aab”는 str2: “aaa”와 세번째 문자에서 다릅니다. 따라서 ‘b’ 의 아스키코드 값인 98에서 ‘a’의 아스키코드 값인 97을 뺀 1을 반환합니다.

아스키코드 테이블 보기

사용 예제

#include <cstring>
#include <iostream>

using namespace std;

int main() {
  // 비교할 두 문자열
  char str1[] = "akasa";
  char str2[] = "akas";

  // strncmp()를 사용한 문자열 비교
  int result1 = strncmp(str1, str2, 4);

  // strcmp()를 사용한 문자열 비교
  int result2 = strcmp(str1, str2);

  // n은 strncmp()의 세번째 인자입니다.
  if (result1 == 0)
    cout << "1. str1은 n개의 문자만큼 str2와 같습니다.\n";
  else if (result1 > 0)
    cout << "1. str1이 str2보다 큽니다.\n";
  else
    cout << "1. str2가 str1보다 큽니다.\n";

  cout << "2. strncmp()의 반환값: " << result1 << endl;

  if (result2 == 0)
    cout << "3. str1과 str2는 같습니다.\n";
  else if (result2 > 0)
    cout << "3. str1이 str2보다 큽니다.\n";
  else
    cout << "3. str2가 str1보다 큽니다.\n";

  cout << "4. strcmp()의 반환값: " << result2 << endl;

  return 0;
}

결과값:

1. strncmp 함수를 통해 첫 4개의 문자만 비교하기 때문에 str1과 str2는 같습니다.

2. 두 문자열이 4번째 문자까지 같기 때문에 strncmp는 0을 반환합니다.

3. strcmp 함수는 두 문자열 전체를 비교하기 때문에 str1과 str2는 다릅니다. (str1: “akasa” vs str2: “akas”) 그리고, str1이 str2 보다 큽니다.

4. str1이 str2보다 큰 이유는 str1의 ‘a’의 아스키코드 값은 97이고, str2의 ‘\0′(null)의 아스키코드 값은 0이기 때문입니다. 따라서, strcmp는 97 – 0 = 97을 반환합니다.

(4번째 자리까지는 두 문자열이 동일하나, 5번째 자리가 다릅니다. str1은 ‘a’ str2는 4번째 문자가 마지막이였기 때문에 5번째 자리에는 ‘\0′(null)이 존재합니다.)

답글 남기기