라 이브 러 리 함수 strcmp 의 실현

1713 단어 c 언어
c 언어 에서 라 이브 러 리 함수 strcmp 는 자주 사용 되 는 함수 입 니 다. 두 문자열 의 크기 를 비교 하 는 기능 입 니 다. 문자열 은 어떻게 크기 를 비교 합 니까?
사실은 같은 위치 에 있 는 문자 의 ASC 코드 값 의 크기 입 니 다.
예 를 들 어:
'abc' 와 'acb' 두 문자열 은 크기 를 비교 하면 후자 가 큰 것 이 분명 하 다. 우리 가 분석 해 보 자.
비교 크기 는 하나의 문자 로 비교 하 는 것 이다. a 는 a 와 같 고 다음 을 비교 하면 b 와 c 는 c 의 ASC 코드 값 이 크 기 때문에 후자 가 크다.
그럼 누가 물 어 볼 게 요. 여기 뒤에 비교 안 해도 돼 요?
정 답 은 "네" 입 니 다.
구체 적 인 코드 를 살 펴 보 자.
4. 567913. 코드 를 분석 해 봅 시다.
우선 반환 값 이 int 인 이 유 는 무엇 입 니까?
strcmp 비 교 는 0 보다 크 기 때문에 두 문자열 이 같 는 지 여 부 를 판단 합 니 다.
구체 적 으로 말 하면 string 1 > string 2 그러면 반환 결 과 는 1, 즉 0 보다 크다.
하면, 만약, 만약...
기다 리 면 0 으로 돌아간다.
그래서 보통 판단 을 따라 가 야 한다. 예 를 들 어:
int strcmp(const char *string1,const char *string2)
{
	int ret = 0;
	assert(string1);
	assert(string2);
	
	while(!(ret = *(unsigned char *)string1 - *(unsigned char *)string2) && *string2)
	{
		string1++;
		string2++;
	}
	if(ret<0)
	{
		ret = -1;
	}
	else if(ret>0)
	{
		ret = 1;
	}
	return ret;
}

이것 은 단지 용법 일 뿐 이 며, 유연 하 게 운용 하고 또 많이 연습 하 는 것 이다.
assert 는 전 달 된 지침 이 비어 있 는 지 여 부 를 판단 하고 코드 의 건장 성 을 강화 하 는 데 사용 된다 고 단언 했다.
주요 코드 핵심 (! ret = * (unsigned char *) string 1 - * (unsigned char *) string 2) & & * string 2 를 분석 해 보 겠 습 니 다.
unsigned char 로 * 강전 은 우리 가 상쇄 한 문자 ASC 코드 값 이 양수 이 고 음수 가 없 기 때문에 기호 수가 없 기 때문이다.
왜 반 대 를 취 하 는 지 판단 에서 ret 가 0 이면 순환 체 가 튀 어 나 오기 때문에 반 대 를 취하 고 0 이 아니 라 다음 문 자 를 비교 합 니 다. & string 2 는 판단 이 끝 납 니 다. 여기 string 2 도 바 꿀 수 있 습 니 다.
string 1, 어떻게 판단 하나 요?두 문자열 을 동시에 비교 하면 마지막 문자 \ 0 문자 상쇄 ret = = 0, 취 반 성립 되 므 로 string 1 또는 strint 2 의 문 자 를 봐 야 합 니 다. \ 0 이 라면 0 이 가짜 로 순환 하 는 것 을 표시 합 니 다.

좋은 웹페이지 즐겨찾기