Maison  >  Article  >  développement back-end  >  Comment comparer des chaînes en langage C

Comment comparer des chaînes en langage C

青灯夜游
青灯夜游original
2021-05-08 15:05:4539740parcourir

Méthodes de comparaison : 1. bcmp(), compare les n premiers octets d'une chaîne pour voir s'ils sont égaux ; 2. strcmp(), compare les chaînes en respectant la casse ; 3. strcmp(), pas la taille ; -sensible Chaîne de comparaison écrite ; 4. strncmp() ou strnicmp(), comparaison sensible à la casse des n premiers caractères de la chaîne.

Comment comparer des chaînes en langage C

L'environnement d'exploitation de ce tutoriel : système Windows 7, version c99, ordinateur Dell G3.

Utilisez bcmp() - comparez les n premiers octets de mémoire (chaîne) pour voir s'ils sont égaux

Le prototype est :

int bcmp(const void *s1, const void * s2, int n);

[Paramètres] s1, s2 sont les deux éléments de mémoire (ou deux chaînes) qui doivent être comparés, et n est la longueur à comparer.

[Valeur de retour] Si les n premiers octets de s1 et s2 sont égaux ou n est égal à 0, alors renvoyez 0, sinon renvoyez une valeur non-0.

La fonction bcmp() ne vérifie pas NULL.

En fait, bcmp() et memcmp() ont la même fonction, utilisée pour comparer si les n premiers octets du bloc mémoire sont égaux, mais les deux paramètres s1 et s2 sont des pointeurs, et étrangement situés dans string.h, il peut également être utilisé pour comparer des chaînes.

Exemple :

#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;
}

Utilisez strcmp() - Comparez les chaînes (sensible à la casse)

Le prototype est :

int strcmp(const char *s1, const char *s2);

[Paramètre] s1, s2 sont les deux chaînes qui doivent être comparées.

La comparaison des tailles de chaînes est déterminée par l'ordre dans la table des codes ASCII, et cet ordre est également la valeur des caractères. strcmp() soustrait d'abord la première valeur de caractère de s1 de la première valeur de caractère de s2. Si la différence est de 0, il continuera à comparer le caractère suivant. Si la différence n'est pas de 0, la différence sera renvoyée. Par exemple, comparer les chaînes « Ac » et « ba ​​» renverra la différence (-33) entre les caractères « A » (65) et « b » (98).

[Valeur de retour] Si les chaînes des paramètres s1 et s2 sont les mêmes, 0 sera renvoyé. Si s1 est supérieur à s2, une valeur supérieure à 0 est renvoyée. Si s1 est inférieur à s2, une valeur inférieure à 0 est renvoyée.

Remarque : strcmp() effectue des comparaisons en termes binaires et ne prend pas en compte les caractères multi-octets ou à octets larges.

Exemple :

#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));
}

Sortie :

strcmp(a, b) : 32
strcmp(a, c) :-31
strcmp(a, d) : 0

Utiliser strictmp() - Comparer les chaînes (insensible à la casse)

Le le prototype est :

int strcmp(char *s1, char *s2);

[Description du paramètre] s1, s2 sont les deux chaînes qui doivent être comparées.

La comparaison des tailles de chaînes est déterminée par l'ordre dans la table de codes ASCII, et cet ordre est également la valeur des caractères. strictmp() soustrait d'abord la première valeur de caractère de s1 de la première valeur de caractère de s2. Si la différence est de 0, il continuera à comparer le caractère suivant. Si la différence n'est pas de 0, la différence sera renvoyée. Par exemple, comparer les chaînes « Ac » et « ba ​​» renverra la différence (-33) entre les caractères « A » (65) et « b » (98).

[Valeur de retour] Si les chaînes des paramètres s1 et s2 sont les mêmes, 0 sera renvoyé. Si s1 est supérieur à s2, une valeur supérieure à 0 est renvoyée. Si s1 est inférieur à s2, une valeur inférieure à 0 est renvoyée.

Remarque : strictmp() est unique à Windows. La fonction avec la même fonction sous Linux est strcasecmp(), qui est incluse dans le fichier d'en-tête strings.h.

Une autre fonction qui compare les chaînes sans respecter la casse est strcmpi(). strcmpi() est la définition macro de strictmp(), mais cette fonction n'est pas réellement fournie.

Exemple : Comparez la taille de deux chaînes.

#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;
}

Sortie :

Result: s1 > s2

Utilisez strncmp() - comparez les n premiers caractères de la chaîne (sensible à la casse)

Son le prototype est :

int strncmp ( const char * str1, const char * str2, size_t n );

[Paramètres] str1, str2 sont les deux chaînes qui doivent être comparées, et n est le nombre de caractères à comparer.

La comparaison des tailles de chaînes est déterminée par l'ordre dans la table des codes ASCII, et cet ordre est également la valeur des caractères. strncmp() soustrait d'abord la première valeur de caractère de s2 de la première valeur de caractère de s1. Si la différence est de 0, il continuera à comparer le caractère suivant jusqu'à la marque de fin de caractère.

另外一个不区分大小写比较字符串前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语言视频教程

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn