728x90
[ strcmp ]
- 문자열 비교 (대소문자 구분)
- 앞의 문자가 더 크면 1
- 값이 같으면 0
- 뒤의 문자가 더 크면 -1
[ strncmp ]
- 지정한 갯수만큼만 앞에서부터 비교
#include <stdio.h>
#include <string.h>
int main()
{
char str1[] = "abcdef";
char str2[] = "abcdaa";
char str3[] = "abcdzz";
char str4[] = "abcdef";
printf("%d ", strcmp(str1, str2)); // 1 (앞의 문자가 더 큼)
printf("%d ", strcmp(str1, str3)); // -1 (뒤의 문자가 더 큼)
printf("%d ", strcmp(str1, str4)); // 0 (같음)
printf("%d ", strncmp(str1, str2, 4)); // 0 (앞에서부터 4개 문자 같음)
}
구현식은 아래와 같습니다. 실제 코드는 아니고 직접 짜본 코드입니다.
[ strcmp 구현식]
#include <stdio.h>
int my_strcmp(char* str1, char* str2);
int main()
{
char str1[] = "abcdef";
char str2[] = "abcdaa";
char str3[] = "abcdzz";
char str4[] = "abcdef";
printf("%d ", my_strcmp(str1, str2)); // 1 (앞의 문자가 더 큼)
printf("%d ", my_strcmp(str1, str3)); // -1 (뒤의 문자가 더 큼)
printf("%d ", my_strcmp(str1, str4)); // 0 (같음)
}
int my_strcmp(char* str1, char* str2)
{
int i = 0;
// 한쪽 문자열이 끝날 때까지 비교 수행
while (str1[i] != '\0' || str2[i] != '\0') {
// 문자 같으면 계속 비교
if (str1[i] == str2[i]) {
i++;
continue;
}
// 앞의 문자가 더 크면 1 리턴
else if (str1[i] > str2[i])
return 1;
// 뒤의 문자가 더 크면 -1 리턴
else if (str1[i] < str2[i])
return -1;
i++;
}
// 어느 한쪽 문자열이 끝났고 i - 1 까지 모두 같은 상태
if (str1[i] == str2[i]) // str1[i] == str2[i] == '\0' 이라면 0 리턴
return 0;
else if (str1[i] != '\0') // str1에 글자가 남아있으면 1 리턴
return 1;
else return -1; // str2에 글자가 남아있으면 -1 리턴
}
[ strncmp 구현식 ]
#include <stdio.h>
#include <string.h>
int my_strncmp(char* str1, char* str2, int n);
int main()
{
char str1[] = "abcdef";
char str2[] = "abcdaa";
char str3[] = "abcdzz";
printf("%d ", strncmp(str1, str2, 3)); // 0
printf("%d ", my_strncmp(str1, str2, 3)); // 0
printf("%d ", strncmp(str1, str2, 10)); // 1
printf("%d ", my_strncmp(str1, str2, 10)); // 1
printf("%d ", strncmp(str1, str2, 5)); // 1
printf("%d ", my_strncmp(str1, str2, 5)); // 1
printf("%d ", strncmp(str1, str3, 5)); // -1
printf("%d ", my_strncmp(str1, str3, 5)); // -1
printf("%d ", strncmp(str1, str3, 4)); // 0
printf("%d ", my_strncmp(str1, str3, 4)); // 0
}
int my_strncmp(char* str1, char* str2, int n)
{
int i = 0;
// 한쪽 문자열이 끝날 때까지 또는 n 보다 작을 때 비교 수행
while (i < n && (str1[i] != '\0' || str2[i] != '\0')) {
// 문자 같으면 계속 비교
if (str1[i] == str2[i]) {
i++;
continue;
}
// 앞의 문자가 더 크면 1 리턴
else if (str1[i] > str2[i])
return 1;
// 뒤의 문자가 더 크면 -1 리턴
else if (str1[i] < str2[i])
return -1;
i++;
}
// 어느 한쪽 문자열이 끝나거나 n 갯수만큼 비교한 후
if (n == i) // i == n이라면 찾는 갯수 안의 문자는 모두 같음, 0 리턴
return 0;
else if (str1[i] == '\0' && str2[i] == '\0') // 둘 다 문자열 끝났으면 0 리턴
return 0;
// 둘 중 하나라도 문자열 남아 있으면 비교
else if (str1[i] > str2[i])
return 1;
else return -1;
}
728x90
'▸C언어 > 기본함수 및 구현식' 카테고리의 다른 글
string.h_strcat, strncat_문자열 합치기 (구현식 포함) (2) | 2020.01.15 |
---|---|
string.h_strlen_문자열 길이 구하기 (구현식 포함) (2) | 2020.01.15 |
stdio.h_파일제어 (fopen, fopen_s, fclose) (0) | 2019.12.05 |
string.h_strtok_문자열 나누기 (구현식 포함) (0) | 2019.12.05 |
댓글