Fonction de recherche et de replacement dans une chaine en c

Soyez le premier à donner votre avis sur cette source.

Snippet vu 3 888 fois - Téléchargée 33 fois

Contenu du snippet

Ben voila c mon premier bout de code poster ici alors ne soyez pas indulgent je ne cherche qu'a
m'ameliorer :) bref fini le blabla maintenant le code :
cette fonction cherche une chaine s2 dans la chaine s1 et si elle la
trouve elle remplace la chaine s2 par la chaine s3.
voila c tout simple.

Source / Exemple :


char    *replace(char *s1, char *s2, char *s3)
{
  char  *retour;
  char  *tmp;
  int   i;
  int   j;

  if (!s1 || !s2 || !s3)
    return (0);
  if (!(tmp = strstr(s1, s2)))
    return (s1);
  i = 0;
  j = 0;
  retour = 0;
  retour = malloc(1);
  while ((tmp = strstr(s1 + i, s2)) != 0)
    {
      if (!(strcmp(s1 + i, tmp)))
        {
          retour = realloc(retour, strlen(retour) + strlen(s3));
          strcpy(retour + j, s3);
          i += strlen(s2);
          j += strlen(s3);
        }
      else
        {
          retour = realloc(retour, strlen(retour) + 1);
          retour[j++] = s1[i++];
        }
    }
  while (s1[i])
    {
      retour = realloc(retour, strlen(retour) + 1);
      retour[j++] = s1[i++];
    }
  retour[j] = 0;
  return (retour);
}

A voir également

Ajouter un commentaire

Commentaires

Messages postés
7
Date d'inscription
samedi 18 novembre 2000
Statut
Membre
Dernière intervention
17 décembre 2007

c tres bien fait appart que chez moi coté allocation je fait
retour = (char*) realloc(retour, strlen(retour) + strlen(s3));
Messages postés
1138
Date d'inscription
mardi 10 juin 2003
Statut
Membre
Dernière intervention
25 janvier 2009
3
Heu tu pourrais simplifier 'if (!s1 || !s2 || !s3)' en 'if(s1 && s2 && s3)'

Et la taille de s1 et s2 sont constantes ? parceque si oui tu pourrais calculer une fois et pour toute leurs longeurs, au lieu de toujours la recalculer !
Messages postés
2
Date d'inscription
lundi 6 janvier 2003
Statut
Membre
Dernière intervention
7 juin 2003

:( 143 fois vu et pas un seul commentaire sur le code :(

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.