Une brève discussion sur le code source PHP trois : à propos des fonctions strrchr, strstr et stristr.

不言
Libérer: 2023-04-01 21:48:01
original
2782 Les gens l'ont consulté

Cet article présente principalement le code source PHP trois : à propos des fonctions strrchr, strstr, strstr, il a une certaine valeur de référence. Maintenant, je le partage avec vous. Les amis dans le besoin peuvent s'y référer

string strrchr. (chaîne botte de foin, chaîne aiguille)

Renvoie la chaîne après la dernière aiguille (caractère) dans botte de foin
Si l'aiguille est un nombre, convertissez ce nombre en le caractère correspondant à cette valeur
Si l'aiguille est plus d'une chaîne, prenez le premier caractère
Si la botte de foin est un nombre, le nombre sera directement converti en chaîne
Appelez convert_to_string_ex(haystack) dans le programme

dans L'implémentation de ceci ; la fonction gère essentiellement certaines situations spéciales (comme ci-dessus).
à la fin consiste à localiser la position où la dernière aiguille apparaît et à renvoyer la chaîne après cette position en fonction de la position. Si cette position n'existe pas, identique au retour. false

string strstr (chaîne de foin, chaîne aiguille)
Cette fonction est similaire à strrchr, sauf que son aiguille peut être une chaîne et qu'elle recherche la première occurrence de aiguille selon This. position renvoie la chaîne suivante, si elle n'existe pas, elle renvoie FALSE

a quelques détails spéciaux qui méritent d'être appris dans son code, comme indiqué dans le code suivant.

 static inline char *zend_memnstr(char *haystack, char *needle, int needle_len, char *end){
    char *p = haystack;
    char ne = needle[needle_len-1];     if(needle_len > end-haystack) {
        return NULL;
    }
    end -= needle_len;   //    优化细节一,仅查找end-needle_len长度的字符串     while (p <= end) {
        //    优化细节二,此处先判断字符串的开头和结尾的字符是否一样,如果一样则再判断整个字符串,提升性能
        if ((p = (char *)memchr(p, *needle, (end-p+1))) && ne == p[needle_len-1]) {    
            if (!memcmp(needle, p, needle_len-1)) {
                return p;
            }
        }         if (p == NULL) {
            return NULL;
        } 
        p++;
    }     return NULL;}
Copier après la connexion

Le code ci-dessus est le code de base pour l'implémentation des fonctions strstr et stristr. Fonction : trouver la position où l'aiguille apparaît pour la première fois dans la botte de foin

chaîne stristr (chaîne botte de foin, chaîne aiguille)
La fonction strstr est similaire à strstr, sauf qu'elle n'est pas sensible à la casse.
La principale différence dans l'implémentation du code source PHP est l'ajout de l'opération de conversion de toutes les chaînes en minuscules. L'implémentation du programme consiste à ajouter le code suivant avant la recherche :

   php_strtolower(s, s_len);php_strtolower(t, t_len);return php_memnstr(s, t, t_len, s + s_len);
Copier après la connexion

PS : In. le processus d'examen du code source, j'ai relu le paragraphe précédent de « Reconnaître les pointeurs » et j'ai acquis quelques informations

Les pointeurs peuvent ajouter et soustraire, non pas parce qu'ils sont des pointeurs, mais l'addition et la soustraction ; Les règles ne sont pas des pointeurs, mais l'instinct de l'adresse de type de données. C'est précisément parce que l'adresse a la capacité d'ajouter et de soustraire que le pointeur, en tant que variable stockant l'adresse, peut effectuer des opérations d'addition et de soustraction.
C'est la même chose que les variables entières, car les entiers peuvent être ajoutés, soustraits, multipliés et divisés, ils peuvent donc également être ajoutés, soustraits, multipliés et divisés.

Ce qui précède représente l'intégralité du contenu de cet article. J'espère qu'il sera utile à l'étude de chacun. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois !

Recommandations associées :

Une brève présentation du code source PHP 2 : à propos des fonctions strlen, strtolower, strtoupper, ord, chr

Un bref exposé sur le code source PHP 1 : les fonctions d'explosion et d'implosion

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