라 이브 러 리 함수 strcmp 의 실현
1713 단어 c 언어
사실은 같은 위치 에 있 는 문자 의 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 이 가짜 로 순환 하 는 것 을 표시 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
c 언어 간단한 파일 r/w 조작 방법데이터의 입력과 출력은 거의 모든 C 언어 프로그램과 수반된다. 입력이란 원본에서 데이터를 얻는 것이다. 출력은 단말기에 데이터를 쓰는 것으로 이해할 수 있다.이곳의 원본은 키보드, 마우스, 하드디스크, 시디, 스캐...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.