Essayez deux façons d'implémenter la fonction strcmp() (comparaison de chaînes)

À propos de la fonction strcmp()

strcmp() est une fonction de bibliothèque dans une classe de chaînes très courante dans notre vie quotidienne. Elle est utilisée pour comparer deux chaînes et renvoyer un entier en fonction du résultat de la comparaison. Habituellement, la forme de base est strcmp(str1, str2), si str1=str2, elle renvoie zéro ; si str1<str2, elle renvoie un nombre négatif ; si str1>str2, elle renvoie un nombre positif.

comparer les règles

Les deux chaînes sont comparées caractère par caractère de gauche à droite (par rapport à la taille de la valeur ASCII), jusqu'à ce que des caractères différents apparaissent ou que '\0' soit rencontré.

#Aujourd'hui, je vais essayer d'implémenter cette fonction de deux manières#

Notez que les chaînes entrantes sont toutes const, nous ne modifions pas les chaînes juste pour la comparaison

Méthode 1 : tableau

int strcmp(const char* s1,const char* s2)
{
    
    
	int index=0;
	
	while(s1[index]==s2[index])
	{
    
    
		if (s1[index]=='\0')
		{
    
    
			return 0;
			break;
		}
		index++;
	
	}
	/*
		出现不匹配项
	*/
	int result= s1[index]-s2[index];
	/*if(result>0)           //根据需求 调节返回值
	{
		return 1;
	}
	else
		return-1;*/
	return result;
}

Méthode 2 : pointeur

Nous savons tous que tous les tableaux sont des pointeurs, mais ce pointeur fait référence à l'adresse où se trouve le premier élément du tableau. Ensuite, la seule chose que nous devons faire lors de la traversée du tableau est de faire pointer ce pointeur vers l'élément suivant et tout ira bien.
Mais comment lui faire pointer l'élément suivant ?
Nous allons d'abord utiliser l'adresse pour incrémenter, puis pointer vers l'élément stocké dans la nouvelle adresse.

*p++ arrive

En ce qui concerne p, nous pouvons savoir qu'ils ont la même priorité, et ++ et * sont combinés de droite à gauche, donc dans ce *p++, l'adresse sera exploitée en premier, puis pointera vers la nouvelle adresse, Donc *p++ est équivalent à *(p++).

int mycmp(const char* s1,const char* s2)
{
    
    
	while(*s1==*s2)
	{
    
    
		if(!*s1)
		{
    
    
			return 0;
		}
		*s1++;
		*s2++;
	}
	return *s1-*s2;
}

Guess you like

Origin blog.csdn.net/weixin_43349916/article/details/105398004