>  기사  >  백엔드 개발  >  C 언어에서 문자열을 비교하는 방법

C 언어에서 문자열을 비교하는 방법

青灯夜游
青灯夜游원래의
2021-05-08 15:05:4539740검색

비교 방법: 1. bcmp(), 문자열의 처음 n 바이트가 동일한지 비교합니다. 2. strcmp(), 대소문자를 구분하여 문자열을 비교합니다. 3. strictmp(), 대소문자를 구분하지 않고 문자를 비교합니다. 4. strncmp () 또는 strnicmp(), 문자열의 처음 n 문자를 대소문자를 구분하여 비교합니다.

C 언어에서 문자열을 비교하는 방법

이 튜토리얼의 운영 환경: 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.