컴퓨터 프로그래밍/C

C언어 문자열 처리 함수 (strcmp() : 문자열 비교)

나노콛 2019. 7. 23. 11:39

strcmp() 문자열 비교 함수

 

#include <stdio.h>
#include <string.h>

int main()
{
	char str1[10] = "Hello";
	char str2[10] = "He1lo";
	char str3[10] = "Hpllo";
	int result = 0;

	result = strcmp(str1, str2);
	printf("result : %d\n", result);

	result = strcmp(str1, str3);
	printf("result : %d\n", result);

	str3[1] = 'e';
	result = strcmp(str1, str3);
	printf("result : %d\n", result);
	return 0;
}

strcmp() 문자열 비교 함수

인자는 2개 필요하며
문자열 주솟값이 필요합니다.

첫 번째 인자의 내용이 두 번째 인자의 내용과 같은지 다른지 판단할 수 있습니다.

첫 번째 인자가 더 크다면 1 반환
두 번째 인자가 더 크다면 -1 반환
같다면 0을 반환합니다.


strcmp() 직접 구현해보기

1. 리턴 타입
2. 인자 형태
3. 기능 로직 

 

리턴 타입은 int형이 됩니다. 크고 작음의 문제와 같을 때 반환되는 게 -1 1 0이기 때문입니다.
인자 형태는 문자열 주소입니다.

 

int MyStrcmp(char* s1, char* s2)
{

}

기능 구현


크기의 비교는 해당 문자의 아스키코드값으로 판단하게 됩니다.
그리고 마지막까지 꼭 확인을 해야 합니다.
hello
hello1
이 두 개의 문자는 다른 겁니다.
그래서 같은 시점에 두 개의 값이 모두 null 문자가 있어야 합니다.

 

int MyStrcmp(char* s1, char * s2)
{
	while (*s1!='\0' || *s2!='\0') // 널 문자 전까지 반복
	{
		if (*s1 > *s2) //s1의 값이 크다면
		{
			return 1;    //1 반환
		}
		else if (*s1 < *s2) //s1의 값이 작다면
		{
			return -1;   //-1 반환
		}

		if (*s1 == *s2)  //두개의 값이 같다면
		{
			s1++;   //주소 증가
			s2++;   //주소 증가
			if (*s1 == '\0' && *s2 == '\0') //마지막으로 널문자가 같다면 0반환
			{
				return 0;
			}
		}
	}
}