strcmp, strncmp 문자열 비교
- 프로그래밍/C/C++
- 2018. 6. 30.
strcmp, strncmp 문자열 비교
문자열 비교에 대해서 알아보겠다.
문자열 비교 함수에는 strcmp, strncmp 함수가 있다 이 함수들을 사용하려면 string.h 파일을 include 해야 된다.
strcmp 함수의 반환값에 대해서 먼저 알아보자. strcmp는 ASCII 코드로 비교한다.
strcmp("aos", "super"); | strncmp("aos", "super", 3)이라고 했을 때,
첫 번째 인자가 더 크면 양수를 반환하고
두 번째 인자가 더 크면 음수를 반환하고
내용이 같으면 0을 반환한다.
strncmp는 마지막 인자 값이 원하는 데이터만큼만 비교를 한다.
소스를 보면서 이해를 하자.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #include <stdio.h> #include <string.h> main() { char str1[20], str2[20]; int a; printf("입력 : "); scanf_s("%s", str1, sizeof(str1)); printf("입력 : "); scanf_s("%s", str2, sizeof(str2)); a = strcmp(str1, str2); if (a == 0) printf("문자열이 같습니다.\n"); else if (a > 0) printf("첫번째 문자가 더 큼니다.\n"); else printf("두번째 문자가 더 큼니다.\n"); } | cs |
< 출력 >
입력 : aos
입력 : super
두번째 문자가 더 큼니다.
입력 : super
입력 : aos
첫번째 문자가 더 큼니다.
입력 : aos
입력 : aos
문자열이 같습니다.
strcmp(str1, str2) 반환값을 변수 a에 넣어준 이유는 if 문마다 strcmp를 넣어서 계속 비교하면 속도가 느릴 것이다.
그래서 변수 a에 반환값을 넣어주고 반환값으로 비교를 했다.
문자열이 같으면 0, 첫 번째가 크면 양수, 두 번째가 크면 음수를 반환하게 되어있다.
strncmp는 안 해봐도 알 것이다.
그렇다면 strcmp가 어떻게 동작을 하는지 한번 strcmp의 원형을 보자.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | #include <stdio.h> char cpy(const char *str1, const char *str2) { while (*str1) { if (*str1 != *str2) break; str1++, str2++; } return (*str1 - *str2); } main() { char str1[20], str2[20]; int a; printf("입력 : "); scanf_s("%s", str1, sizeof(str1)); printf("입력 : "); scanf_s("%s", str2, sizeof(str2)); a = cpy(str1, str2); if (a == 0) printf("문자열이 같습니다.\n"); else if (a > 0) printf("첫번째 문자가 더 큼니다.\n"); else printf("두번째 문자가 더 큼니다.\n"); printf("%d", a); } | cs |
< 출력 >
입력 : a
입력 : a
문자열이 같습니다.
0
입력 : a
입력 : b
두번째 문자가 더 큼니다.
-1
입력 : b
입력 : a
첫번째 문자가 더 큼니다.
1
결과는 이렇게 나온다.
그럼 strncmp 원형을 알아보자.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | #include <stdio.h> char cpy(const char *str1, const char *str2, int num) { while (*str1) { if (*str1 != *str2 && *str1 == num) break; str1++, str2++; } return (*str1 - *str2); } main() { char str1[20], str2[20]; int a; printf("입력 : "); scanf_s("%s", str1, sizeof(str1)); printf("입력 : "); scanf_s("%s", str2, sizeof(str2)); a = cpy(str1, str2, 3); if (a == 0) printf("문자열이 같습니다.\n"); else if (a > 0) printf("첫번째 문자가 더 큼니다.\n"); else printf("두번째 문자가 더 큼니다.\n"); printf("%d", a); } | cs |
< 출력 >
입력 : abc
입력 : ab
첫번째 문자가 더 큼니다.
2
입력 : abc
출력 : abcd
두번째 문자가 더 큼니다.
-100
입력 : abc
입력 : abc
문자열이 같습니다.
0
결과가 이렇게 나온다