Trouver le nombre d’occurrences d’une chaîne de caractères dans une autre

Problème

Vous voulez savoir combien de fois une chaîne de caractères se retrouve à l’intérieur d’une autre.

Solution

Parcourez la chaîne de caractères en testant le motif à chaque fois, avec strncmp(), et en incrémentant un compteur quand le motif correspond.


int 
nb_occurrences_of_string_in_string (const char *string, 
                                    const char *pattern) 
{ 
  int lp = strlen (pattern); 
  int ls = strlen (string); 
  int i; 
  int nb = 0; 
 
  for (i = 0; i <= ls - lp; i++) 
    { 
      if (!strncmp (&(string[i]), pattern, lp)) 
        { 
          nb++; 
          i += lp; 
        } 
    } 
  return (nb); 
}
 

Discussion

Ce code renvoie le nombre d’occurrences d’une chaîne à l’intérieur d’une autre. Il existe un cas particulier a prendre en compte, par exemple la chaîne « aaa » à rechercher dans la chaîne « aaaaaaa ». Avec le code précédent, la valeur renvoyée est 2 car nous ne pouvons trouver que deux occurrences distinctes de la chaîne à chercher dans l’autre. Mais si le fait que les occurrences soit distinctes ne vous intéresse pas, la valeur renvoyée doit être 5. Pour cela, supprimez la ligne qui incrémente i de lp.

Ce code présente un certain intérêt si vous cherchez le nombre de lignes d’un...

Pour consulter la suite, découvrez le livre suivant :
couv_EI3CACT.png
60-signet.svg
En version papier
20-ecran_lettre.svg
En version numérique
41-logo_abonnement.svg
En illimité avec l'abonnement ENI
130-boutique.svg
Sur la boutique officielle ENI
Précédent
Déterminer si une chaîne de caractères correspond au motif précisé dans une expression régulière
Suivant
Traiter les blancs au début et à la fin d'une chaîne