Comment comparer des chaînes en langage C

青灯夜游
Libérer: 2023-01-05 16:13:53
original
39921 Les gens l'ont consulté

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);
Copier après la connexion

[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;
}
Copier après la connexion

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

Le prototype est :

int strcmp(const char *s1, const char *s2);
Copier après la connexion

[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));
}
Copier après la connexion

Sortie :

strcmp(a, b) : 32
strcmp(a, c) :-31
strcmp(a, d) : 0
Copier après la connexion

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

Le le prototype est :

int strcmp(char *s1, char *s2);
Copier après la connexion

[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;
}
Copier après la connexion

Sortie :

Result: s1 > s2
Copier après la connexion

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 );
Copier après la connexion

[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;
}
Copier après la connexion

VC6.0下运行结果:

s1-s2=0
s3-s4=-1
s5-s6=1
Copier après la connexion
Copier après la connexion

GCC下运行结果:

s1-s2=0
s3-s4=-1
s5-s6=1
Copier après la connexion
Copier après la connexion

相关推荐:《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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal