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()
함수를 사용하여 Hello
와 Hell
을 비교하는 예제입니다. 인자로 전달되는 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가 더 큰 문자열일 때의 예제입니다.
아래 코드에서 Hello
와 Holly
비교 시, 두번째 문자에서 o
가 e
보다 더 큰 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
Related Posts
- [C++] 배열을 리스트(list)로 변환
- [C++] 배열에서 특정 요소 제거
- [C++] vector 모든 요소의 합계 계산
- [C++] 두개의 배열이 같은지 비교
- [C++] 배열에 특정 요소가 있는지 확인
- [C++] 2차 배열 복사 방법
- [C++] 배열 복사하는 방법 (copy, memcpy)
- [C++] 함수의 인자로 배열 전달
- [C++] vector 모든 값의 평균 계산
- [C++] vector를 문자열로 변환
- [C++] 배열에서 요소의 Index 찾기
- [C++] 배열의 중복 요소 찾기
- [C++] 배열의 중복 요소 제거
- [C++] 배열 순서 거꾸로 뒤집기
- [C++] char 배열을 string으로 변환
- [C++] string을 char 배열로 변환
- [C++] 문자열 거꾸로 뒤집기
- [C++] vector의 중복 요소 제거
- [C++] 두 배열을 하나의 배열로 합치기
- [C++] 배열 길이, 크기 얻는 방법
- [C++] 배열에서 최대값, 최소값 찾기 (3가지 방법)
- [C++] int를 string으로 변환, 3가지 방법
- [C++] 문자열 리스트(Vector, 배열) 정렬
- [C++] string의 문자 정렬
- [C++] string을 int로 변환, 3가지 방법
- [C++] string 대문자/소문자 변환 방법
- [C++] string.compare() 문자열 비교
- [C++] int를 char로 변환, 3가지 방법
- [C++] 문자열 자르기, 3가지 방법
- [C++] isdigit(), 어떤 문자가 숫자인지 확인
- [C++] strlen(), 문자열 길이 계산
- [C++] strcmp(), strncmp() 함수로 문자열 비교
- [C++] strstr(), 특정 문자열 찾기