[C++] strcmp(), strncmp() 함수로 문자열 비교

C++에서 strncmp() 또는 strcmp() 함수를 이용하여 두개의 문자열이 같은지 다른지 비교할 수 있습니다. 두개의 문자열이 다를 때, 문자열의 크기를 비교하여 어떤 문자열이 큰지 구분하여 리턴합니다. 문자열의 크기를 비교할 때는 각 문자열의 ASCII 값을 비교하여 크다, 작다를 판단합니다.

문자열 비교 결과에 따라 아래와 같은 값을 리턴합니다.

  • String1과 String2가 같을 때 0을 리턴
  • String1이 String2보다 클 때 양수 리턴
  • String1이 String2보다 작을 때 음수 리턴

1. strcmp()와 strncmp()의 차이점

strcmp()와 strncmp() 함수는 아래와 같이 인자를 받습니다.

// 1.
int strcmp(const char *s1, const char *s2);

// 2.
int strncmp(const char* s1, const char* s2, size_t count);

strcmp()strncmp()는 모두 인자로 전달되는 두개의 문자열이 같은지, 다른지를 계산하여 결과를 리턴하는 함수입니다. 두개의 문자열을 비교하여 아래와 같은 결과를 리턴합니다.

  • s1과 s2가 같을 때 0을 리턴
  • s1이 s2보다 클 때 양수 리턴
  • s1이 s2보다 작을 때 음수 리턴

차이점은 strcmp()의 경우 인자로 전달된 두개의 문자열을 모두 비교합니다. 반면에 strncmp()는 인자로 최대 비교 문자열 개수를 인자로 전달하며, 최대 개수 이하의 문자들만 비교하여 결과를 리턴합니다.

2. strncmp()으로 문자열 비교

strncmp() 함수는 인자로 전달된 문자열 s1과 s2를 비교하며, count 길이만큼만 문자열을 비교합니다. 만약 count가 5로 전달되면, 최대 5개의 문자들만 비교합니다.

int strncmp(const char* s1, const char* s2, size_t count);

2.1 문자열 비교 예제 (1)

다음은 strncmp()함수를 사용하여 HelloHell을 비교하는 예제입니다. 인자로 전달되는 count가 5이기 때문에 최대 5개의 문자만 비교합니다. 참고로, 인자로 전달되는 두개의 문자열의 길이가 달라도 됩니다.

#include <iostream>
#include <string.h>

using namespace std;

int main()
{
    char s1[] = "Hello";
    char s2[] = "Hell";

    int result= strncmp(s1, s2, 5);

    if (result == 0)
        cout << "s1 = s2";
    else if (result > 0)
        cout << "s1 > s2";
    else if (result < 0)
        cout << "s1 < s2";
}

실행 결과는 아래와 같은데요, s1과 s1 비교 시, Hell까지는 동일하고 5번째 문자 비교 시, s1은 o이고 s2는 문자가 없기 때문에 s1이 더 크다고 판단되어 양수(0보다 큰 값)가 리턴됩니다.

s1 > s2

2.2 문자열 비교 예제 (2)

strncmp()는 인자로 전달되는 s1과 s2가 동일한 문자열이라고 판단이 되면 0을 리턴합니다.

#include <iostream>
#include <string.h>

using namespace std;

int main()
{
    char s1[] = "Hello";
    char s2[] = "Hello";

    int result= strncmp(s1, s2, 5);

    if (result == 0)
        cout << "s1 = s2";
    else if (result > 0)
        cout << "s1 > s2";
    else if (result < 0)
        cout << "s1 < s2";
}

Output:

s1 = s2

2.3 문자열 비교 예제 (3)

이번에는 s1보다 s2가 더 큰 문자열일 때의 예제입니다.

아래 코드에서 HelloHolly 비교 시, 두번째 문자에서 oe보다 더 큰 ASCII 값을 갖고 있기 때문에 두번째 인자 s2가 더 크다고 판단되어 음수가 리턴됩니다.

#include <iostream>
#include <string.h>

using namespace std;

int main()
{
    char s1[] = "Hello";
    char s2[] = "Holly";

    int result= strncmp(s1, s2, 5);

    if (result == 0)
        cout << "s1 = s2";
    else if (result > 0)
        cout << "s1 > s2";
    else if (result < 0)
        cout << "s1 < s2";
}

Output:

s1 < s2

3. strcmp()으로 문자열 비교

strcmp()strncmp()처럼 동일하게 문자열을 비교하면 됩니다. 대신 최대 비교 개수(count)를 인자로 전달하지 않습니다. 그렇기 때문에 문자열의 모든 길이를 비교하게 됩니다.

#include <iostream>
#include <string.h>

using namespace std;

int main()
{
    char s1[] = "Hello";
    char s2[] = "Hell";

    int result= strcmp(s1, s2);

    if (result == 0)
        cout << "s1 = s2";
    else if (result > 0)
        cout << "s1 > s2";
    else if (result < 0)
        cout << "s1 < s2";
}

Output:

s1 > s2

4. References

Loading script...
codechachaCopyright ©2019 codechacha