본문 바로가기
C, C++/함수창고

[C] DIY로 해보는 strcmp

by 야호호코코 2018. 7. 14.
반응형

 string.h에 내장되어있는 함수인 strcmp(str1, str2). 두 개의 문자열의 사전상 순서(크기)를 비교하기 위해 사용된다.


 리턴 값이 0보다 작으면 str1이 더 먼저 나오는 것. 

 리턴 값이 0이면 두 문자열이 같은 것.

 리턴 값이 0보다 크면 str2가 먼저 나오는 것이다. 


  

함수 알고리즘

 

 1. 두 문자열을 처음 문자부터 비교한다. 중간에 서로 다른 문자가 나오면 비교해 str1의 문자가 사전상 먼저 나오면 -1, str2가 사전상 먼저 나오면 1을 리턴한다. 


 2. for문을 빠져나오면 상황은 두 가지이다. 둘 중 하나가 먼저 NULL을 만났거나, 둘 다 같아서 둘 다 NULL을 만난 상태이거나. 여기서 str1이 먼저 끝났으면 -1, str2가 먼저 끝났으면 1을 리턴한다. 길이가 짧으면 무조건 먼저 나오니까. 


 3. 해당 if문도 들어가지 않고 탈출한다면, 두 문자열은 같은 문자열이다. 0을 리턴한다.


#include <stdio.h>

// str1이 사전상 먼저 나오면 return -1, 같으면 return 0, str2가 먼저 나오면 return 1
int my_strcmp(char *str1, char *str2) {

	int i;

	for (i = 0; str1[i] && str2[i]; i++) {
		if (str1[i] < str2[i]) return -1;
		if (str1[i] > str2[i]) return 1;
	}

	if (!(!str1[i] && !str2[i])) {
		if (!str1[i]) return -1;
		if (!str2[i]) return 1;
	}

	return 0;

}

int main() {

	char str1[101];
	char str2[101];

	scanf("%s", str1);
	scanf("%s", str2);

	printf("%d", my_strcmp(str1, str2));

}


반응형

'C, C++ > 함수창고' 카테고리의 다른 글

[C] 함수: 숫자 뒤집기  (0) 2018.07.25