Partage
  • Partager sur Facebook
  • Partager sur Twitter

Eliminer un caractère d'une chaîne

    20 février 2017 à 0:57:47

    Bonjour,

    J'essaye de supprimer le caractère 'e' d'une chaîne saisie par l'utilisateur, cependant, j'obtiens une erreure à l'éxecution :

    #include <stdio.h>
    #include <string.h>
    
    int main(void)
    {
      
      char tab[132];
      char tab2[132];
      
      int num = 0;
      
      printf("Text : ");
      fgets(tab,132,stdin);
      
      for(int i = 0;i<132;i++)
      {
        if(tab[i] == 'e')
        {
          strcpy(tab2,tab[i+1]);
          tab[i] = 0;
        }
      }
      
      printf("Text : %s", tab2);
      printf("\n");
      
      return 0;
    }

    Si je ne fais pas de strcpy, la chaîne tab s'arrête dès que le caractère 'e' a été rencontré. Pourquoi y'a t-il une erreure malgré l'ajout de strcpy ?

    Merci d'avance

    • Partager sur Facebook
    • Partager sur Twitter

    Développeur Web autodidacte HTML5/CSS3/JS + C# (ASP.NET Core) / Python (Django)

      20 février 2017 à 1:06:37

      Bonjour,

      "Pourquoi y'a t-il une erreure malgré l'ajout de strcpy ?"

      Pense à lire les warnings.

      a.c:19:19: warning: passing argument 2 of ‘strcpy’ makes pointer from integer without a cast [-Wint-conversion]
             strcpy(tab2,tab[i+1]);

      -
      Edité par ASW_ 20 février 2017 à 16:00:09

      • Partager sur Facebook
      • Partager sur Twitter
        20 février 2017 à 15:00:49

        ASW_ a écrit:

        Bonjour,

         Je ne comprends pas ton raisonnement ligne 19 - 20, voici un exemple sans avoir besoin d'un tableau secondaire :

          char * v = tab;
          while(v = strchr(v, 'e'))
          	strcpy(v, v + 1);
          
        

        Bonjour,

        Attention au comportement indéterminé lorsque les chaines se chevauchent.

        • Partager sur Facebook
        • Partager sur Twitter
          20 février 2017 à 15:26:43

          Effectivement j'ai omis ce détail désolé ( ou de lire la doc :euh: ).

          -
          Edité par ASW_ 20 février 2017 à 15:59:56

          • Partager sur Facebook
          • Partager sur Twitter
            20 février 2017 à 15:55:40

            Hello,

            Bon, alors sans tableau secondaire, sans strcpy() ou memcpy() (→ qui peut aussi poser problème en cas de chaines se chevauchant [voir memmove() en ce cas] ), allons au plus simple:

            char *s,*t;
            	
            s=t=str;
            do
            	if(*s!='e')
            		*t++=*s;
            while(*s++!=0);
            

            Edgar;

            -
            Edité par edgarjacobs 20 février 2017 à 15:59:43

            • Partager sur Facebook
            • Partager sur Twitter

            On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

            Anonyme
              20 février 2017 à 17:59:00

              Le principe reste "recopier l'ensemble des caractères de la chaîne sauf la lettre e".

              Sur ce principe, pas besoin de strcpy, la variable num que tu proposes est sans doute en rapport avec l'index lors de la copie, je l'ai remplacé par la variable j.

              #include <stdio.h>
              #include <string.h>
              
              int main(void)
              {
              
                  char tab[132];
                  char tab2[132];
                  int i, j=0;
              
                  printf("Text : ");
                  fgets(tab,132,stdin);
              
                  for(i=0; tab[i]!='\0'; i++)
                  {
                      if(tab[i] != 'e'){
                          tab2[j] = tab[i];
                          j++;}
                  }
              
                  tab2[j] = '\0';
              
                  printf("Text : %s", tab2);
                  printf("\n");
              
                  return 0;
              }



              • Partager sur Facebook
              • Partager sur Twitter

              Eliminer un caractère d'une chaîne

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown