비교 방법: 1. bcmp(), 문자열의 처음 n 바이트가 동일한지 비교합니다. 2. strcmp(), 대소문자를 구분하여 문자열을 비교합니다. 3. strictmp(), 대소문자를 구분하지 않고 문자를 비교합니다. 4. strncmp () 또는 strnicmp(), 문자열의 처음 n 문자를 대소문자를 구분하여 비교합니다.
이 튜토리얼의 운영 환경: Windows 7 시스템, c99 버전, Dell G3 컴퓨터.
bcmp() 사용--메모리(문자열)의 처음 n바이트를 비교하여 동일한지 확인합니다.
프로토타입은 다음과 같습니다.
int bcmp(const void *s1, const void * s2, int n);
[매개변수] s1, s2는 두 개의 메모리 조각입니다(또는 두 문자열), n은 비교할 길이입니다.
【반환 값】 s1과 s2의 처음 n 바이트가 동일하거나 n이 0이면 0을 반환하고, 그렇지 않으면 0이 아닌 값을 반환합니다.
bcmp() 함수는 NULL을 확인하지 않습니다.
사실 bcmp()와 memcmp()는 동일한 함수를 가지고 있는데, 메모리 블록의 처음 n바이트가 동일한지 비교하는 데 사용됩니다. 그러나 두 매개변수 s1과 s2는 포인터이며 위치가 이상합니다. string.h 파일에서 문자열을 비교하는 데에도 사용할 수 있습니다.
예:
#include <stdio.h> #include <string.h> int main () { char *s1 = "Golden Global View"; char *s2 = "Golden Global View"; if( !bcmp(s1, s2, 7) ) printf("s1 equal to s2 in first 7 bytes"); else printf("s1 not equal to s2 in first 7 bytes"); return 0; }
strcmp() 사용--문자열 비교(대소문자 구분)
프로토타입은 다음과 같습니다.
int strcmp(const char *s1, const char *s2);
[매개변수] s1, s2는 비교해야 하는 두 문자열입니다.
문자열 크기의 비교는 ASCII 코드표의 순서에 따라 결정되며 이 순서는 문자의 값이기도 합니다. strcmp()는 먼저 s2의 첫 번째 문자 값에서 s1의 첫 번째 문자 값을 뺍니다. 차이가 0이면 다음 문자를 계속 비교하여 차이가 반환됩니다. 예를 들어, 문자열 "Ac"와 "ba"를 비교하면 문자 "A"(65)와 'b'(98) 사이의 차이(-33)가 반환됩니다.
[반환값] s1, s2 파라미터의 문자열이 동일할 경우 0을 반환합니다. s1이 s2보다 크면 0보다 큰 값이 반환됩니다. s1이 s2보다 작으면 0보다 작은 값이 반환됩니다.
참고: strcmp()는 바이너리로 비교를 수행하며 멀티바이트 또는 와이드바이트 문자를 고려하지 않습니다.
예:
#include <string.h> main(){ char *a = "aBcDeF"; char *b = "AbCdEf"; char *c = "aacdef"; char *d = "aBcDeF"; printf("strcmp(a, b) : %d\n", strcmp(a, b)); printf("strcmp(a, c) : %d\n", strcmp(a, c)); printf("strcmp(a, d) : %d\n", strcmp(a, d)); }
출력:
strcmp(a, b) : 32 strcmp(a, c) :-31 strcmp(a, d) : 0
strictmp() 사용--문자열 비교(대소문자 구분 안 함)
프로토타입은 다음과 같습니다.
int strcmp(char *s1, char *s2);
[매개변수 설명] s1, s2는 다음과 같습니다. 문자열을 비교했습니다.
문자열 크기의 비교는 ASCII 코드표의 순서에 따라 결정되며 이 순서는 문자의 값이기도 합니다. stricmp()는 먼저 s2의 첫 번째 문자 값에서 s1의 첫 번째 문자 값을 뺍니다. 차이가 0이면 다음 문자를 계속 비교하여 차이가 반환됩니다. 예를 들어, 문자열 "Ac"와 "ba"를 비교하면 문자 "A"(65)와 'b'(98) 사이의 차이(-33)가 반환됩니다.
[반환값] 매개변수 s1과 s2의 문자열이 동일하면 0을 반환합니다. s1이 s2보다 크면 0보다 큰 값이 반환됩니다. s1이 s2보다 작으면 0보다 작은 값이 반환됩니다.
참고: strictmp()는 Windows에 고유합니다. Linux에서 동일한 기능을 가진 함수는 헤더 파일 strings.h에 포함된 strcasecmp()입니다.
대소문자 구분 없이 문자열을 비교하는 또 다른 함수는 strcmpi()입니다. strcmpi()는 strictmp()의 매크로 정의이지만 이 함수는 실제로 제공되지 않습니다.
예: 두 문자열의 크기를 비교합니다.
#include<stdio.h> #include<string.h> int main(void) { /*定义两个字符串*/ char* s1 = "http://see.xidian.edu.cn/cpp/u/biaozhunku/"; char* s2 = "http://see.xidian.edu.cn/cpp/shujujiegou/"; /*比较字符串(不分大小写)*/ int result = stricmp(s1,s2); // 也可以改成strcmpi() if(result>0) { printf("Result: s1 > s2"); } else if(result<0) { printf("Result: s1 < s2"); } else if(result == 0) { printf("Result: s1 = s2"); } getchar();/*等待用户输入个字符,然后退出*/ return 0; }
출력:
Result: s1 > s2
strncmp() 사용--문자열의 처음 n개 문자를 비교합니다(대소문자 구분)
프로토타입은 다음과 같습니다.
int strncmp ( const char * str1, const char * str2, size_t n );
[매개변수] str1, str2는 필요한 두 문자입니다. 비교할 문자열, n은 비교할 문자 수입니다.
문자열 크기의 비교는 ASCII 코드표의 순서에 따라 결정되며 이 순서는 문자의 값이기도 합니다. strncmp()는 먼저 s1의 첫 번째 문자 값에서 s2의 첫 번째 문자 값을 뺍니다. 차이가 0이면 문자 끝 표시까지 다음 문자를 계속 비교합니다.
另外一个不区分大小写比较字符串前n个字符的函数是strncmpi(),strncmpi()是strnicmp()的宏定义,实际未提供此函数。
示例:对6组字符串进行比较。
#include<stdio.h> #include<string.h> int main(void){ char* s1 = "http://see.xidian.edu.cn/cpp/u/xitong/"; char* s2 = "HTTP://see.xidian.edu.cn/cpp/u/xitong/"; char* s3 = "abc"; char* s4 = "abcxyz"; char* s5 = "123456"; char* s6 = "123"; printf("s1-s2=%d\n", strnicmp(s1, s2, 20)); // 是否区分大小写 printf("s3-s4=%d\n", strnicmp(s3, s4, 100)); // s3的长度小于s4 printf("s5-s6=%d\n", strnicmp(s5, s6, 100)); // s5的长度大于s6 return 0; }
VC6.0下运行结果:
s1-s2=0 s3-s4=-1 s5-s6=1
GCC下运行结果:
s1-s2=0 s3-s4=-1 s5-s6=1
相关推荐:《C语言视频教程》
위 내용은 C 언어에서 문자열을 비교하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!