Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Exo chaines] Solutions

    16 juin 2006 à 21:48:19

    Bonjour bonjour!

    Bon, ayant cherché lgtps page par page (oui, je cherche encore la fonction recherche de ce fofo :P) une solution aux exos de Mateo21 sans succès, j'ai décidé de poster les miennes (celles que j'ai reussis ^^) et completer celle que je n'ai pas réussis, afin de faire un post qui regrouperait ces exos + leurs solutions...

    Voilà, donc l'exercice consiste à reproduire certaines fonction de la lib string.

    1°)
    char* strcpy(char* copieDeLaChaine, const char* chaineACopier);

    Ma solution :
    char* strcpy(char* copieDeLaChaine, const char* chaineACopier)
    {
        long i = 0;
       
        do
        {
            copieDeLaChaine[i] = chaineACopier[i];
            i++;
        }
        while(chaineACopier[i] != '\0');
    }


    2°)
    char* strcat(char* chaine1, const char* chaine2);

    Ma solution :
    char* strcat(char* chaine1, const char* chaine2);

    Ma solution :
    char* strcat(char* chaine1, const char* chaine2)
    {
        long i = 0;
        long j = 0;
       
        do
        {
            i++;
        }
        while(chaine1[i] != '\0');
        do
        {
            chaine1[i] = chaine2[j];
            i++;
            j++;
        }
        while(chaine2[j] != '\0');
    }


    3°)
    int strcmp(const char* chaine1, const char* chaine2)
    {
        int comp = 0;
        long i = 0, j = 0;
       
        do
        {
            i++;
        }
        while(chaine1[i] != '\0');
        do
        {
            j++;
        }
        while(chaine2[j] != '\0');
        if(i > j)
        {
            i = 0;
            do
            {
                if(chaine1[i] == chaine2[i])
                {
                    comp = comp + 0;
                }
                else
                {
                    comp = comp + 1;
                }
                i++;
            }
            while(chaine1[i] != '\0');
        }
        else
        {
            i = 0;
            do
            {
                if(chaine1[i] == chaine2[i])
                {
                    comp = comp + 0;
                }
                else
                {
                    comp = comp + 1;
                }
                i++;
            }
            while(chaine2[i] != '\0');
        }
       
        return comp;
    }

    (lol celle-là je me suis bien marré ^^)
    Edit : J'ai corrigé une grosse erreur...

    4°)
    char* strchr(const char* chaine, int caractereARechercher);

    Ma solution :
    char* strchr(const char* chaine, int caractereARechercher)
    {
        long i = 0, j = 0;
        char suiteChaine[100] = {0};
       
        do
        {
            i++;
        }
        while(chaine[i] != caractereARechercher);
        if(chaine[i] != '\0')
        {
            do
            {
                suiteChaine[j] = chaine[i];
                j++;
                i++;
            }
            while(chaine[i] != '\0');
        }   
        else
        {
            *suiteChaine = NULL;
        }
       

        return suiteChaine;
    }


    Mais elle ne marche pas... Une idée?
    Edit : Voilà, j'ai réparé...

    5°)
    char* strpbrk(const char* chaine, const char* lettresARechercher);

    Ma solution :

    En cours

    6°)
    char* strstr(const char* chaine, const char* chaineARechercher);

    Ma solution :

    En cours



    Et voilou ^^

    PS : Si vous voyez qqchose à modifier dans mes solutions postez ça ici ;)
    • Partager sur Facebook
    • Partager sur Twitter
      16 juin 2006 à 22:01:44

      A quoi bon un type char* sans retourner d'adresse ?
      • Partager sur Facebook
      • Partager sur Twitter
        16 juin 2006 à 22:10:26

        Rien, c'etait simplement pr replacer le prototype original (qui lui aussi retourne un char inutile...)
        • Partager sur Facebook
        • Partager sur Twitter
          16 juin 2006 à 22:32:04

          Citation : DelfShkrimm

          Bon, ayant cherché lgtps page par page (oui, je cherche encore la fonction recherche de ce fofo :P) une solution aux exos de Mateo21 sans succès, j'ai décidé de poster les miennes (celles que j'ai reussis ^^) et completer celle que je n'ai pas réussis, afin de faire un post qui regrouperait ces exos + leurs solutions...

          Voilà, donc l'exercice consiste à reproduire certaines fonction de la lib string.

          1°)

          char* strcpy(char* copieDeLaChaine, const char* chaineACopier);


          Ma solution :

          char* strcpy(char* copieDeLaChaine, const char* chaineACopier)
          {
              long i = 0;
             
              do
              {
                  copieDeLaChaine[i] = chaineACopier[i];
                  i++;
              }
              while(copieDeLaChaine[i] == '\0');
          }



          Tu as testé ? Déjà, il est interdit d'utiliser des identificateurs réservés. Ensuite, ton code donne ceci :

          #include <stdio.h>

          char* str_cpy(char* copieDeLaChaine, const char* chaineACopier)
          {
              long i = 0;

              do
              {
                  copieDeLaChaine[i] = chaineACopier[i];
                  i++;
              }
              while(copieDeLaChaine[i] == '\0');
          }

          int main()
          {
             char s[32] = "xxxxxxxx";

             printf("'%s'\n", s);
             str_cpy(s, "Hello world");
             printf("'%s'\n", s);

             return 0;
          }

          'xxxxxxxx'
          'Hxxxxxxx'

          Ce qui est gravement n'importe quoi...

          C'est normal. Tu testes un caractère de la chaine de destination. C'est absurde ! Il peut y avoir n'importe quoi dans la chaine de destination...

          C'est le 0 de la chaine source qu'il faut surveiller...

          Je te laisse corriger et faire les tests...
          • Partager sur Facebook
          • Partager sur Twitter
          Music only !
            17 juin 2006 à 7:45:47

            Erf désolé, j'avais pris un ancien projet, pas celui en cours.

            Bon bref, c'est corrigé!
            • Partager sur Facebook
            • Partager sur Twitter
              17 juin 2006 à 9:23:27

              Citation : DelfShkrimm


              2°)

              char* strcat(char* chaine1, const char* chaine2);


              Ma solution :


              Ne fonctionne pas dans tous les cas :

              #include <stdio.h>

              static char* str_cat(char* chaine1, const char* chaine2)
              {
                  long i = 0;
                  long j = 0;

                  do
                  {
                      i++;
                  }
                  while(chaine1[i] != '\0');
                  do
                  {
                      chaine1[i] = chaine2[j];
                      i++;
                      j++;
                  }
                  while(chaine2[j] != '\0');
              }
              int main()
              {
                 char s[32] = "";

                 printf("'%s'\n", s);
                 str_cat(s, " world");
                 printf("'%s'\n", s);

                 return 0;
              }


              ''
              ''

              Plus important que le codage lui-même, il faut apprendre à tester son code... Les méthodes dites 'agiles' (XP, par exemple) préconisent d'écrire le code de test avant le code lui-même.

              #include <stdio.h>
              #include <stdlib.h>
              #include <string.h>

              #define N(a) (sizeof(a)/sizeof*(a))

              static char* str_cat(char* chaine1, const char* chaine2)
              {
                 long i = 0;
                 long j = 0;

                 do
                 {
                    i++;
                 }
                 while (chaine1[i] != '\0');
                 do
                 {
                    chaine1[i] = chaine2[j];
                    i++;
                    j++;
                 }
                 while (chaine2[j] != '\0');
              }

              /* ---------------------------------------------------------------------
                 tu ()
                 ---------------------------------------------------------------------
                 test unitaire
                 ---------------------------------------------------------------------
                 I:
                 O:
                 --------------------------------------------------------------------- */

              static int tu (void)
              {
                 int ret = EXIT_SUCCESS;

                 struct test
                 {
                    unsigned long nb;
                    struct in
                    {
                       char const *a;
                       char const *b;
                    }
                    in;
                    struct out
                    {
                       char const *o;
                    }
                    out;
                 };

                 static struct test a[] =
                    {
                       {
                          10, "", "", ""},
                       {
                          11, "a", "", "a"},
                       {
                          12, "", "b", "b"},
                       {
                          13, "a", "b", "ab"},
                    };

                 int err = 0;
                 size_t i;

                 for (i = 0; i < N(a) && !err; i++)
                 {
                    struct test const *p = a + i;
                    char s[16];

                    strcpy(s, p->in.a);

                    /* D.U.T */
                    str_cat (s, p->in.b);

                    if (strcmp (s, p->out.o) != 0)
                    {
                       printf ("ERROR at test %lu\n\n", p->nb);
                       err = 1;
                    }
                 }

                 if (!err)
                 {
                    puts ("\nP A S S E D\n");
                 }

                 return ret;
              }

              int main()
              {
                 tu();
                 return 0;
              }


              ERROR at test 12


              Press ENTER to continue.
              • Partager sur Facebook
              • Partager sur Twitter
              Music only !
                17 juin 2006 à 17:15:05

                oO? t'as vu ou se situe l'exo sur les chaines?

                Oui en fait je sais bien que ca ne marche pas pour tout... Mais je vois pas comment résoudre ca :S (c'est pr ca que je post ici ^^)

                • Partager sur Facebook
                • Partager sur Twitter
                  17 juin 2006 à 18:02:40

                  Citation : DelfShkrimm

                  oO? t'as vu ou se situe l'exo sur les chaines?


                  Pas compris.

                  Citation : Pas de titre


                  Oui en fait je sais bien que ca ne marche pas pour tout... Mais je vois pas comment résoudre ca :S (c'est pr ca que je post ici ^^)


                  En fait, c'est une question d'algorithme. Il faut bien saisir la différence entre

                  TANT QUE expression est VRAIE
                    action()
                  FIN TANT QUE

                  et

                  FAIRE
                    action()
                  TANT QUE expression est VRAIE

                  Dans le premier cas, l'action peut très bien ne jamais se faire, alors que dans le deuxième, elle se fait systématiquement. Il se pourrait donc très bien que ce genre de choix joue sur le comportement de ton str_cat()...

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Music only !
                    17 juin 2006 à 18:23:11

                    Citation

                    Citation

                    Oui en fait je sais bien que ca ne marche pas pour tout... Mais je vois pas comment résoudre ca :S (c'est pr ca que je post ici ^^)



                    J'ai pas dit que ça ne marchait pas du tout, mais que ça ne marchait pas dans certains cas. En fait, c'est une question d'algorithme. Il faut bien saisir la différence entre



                    Où il y a ecrit que ca marche pas du tout? oO

                    Ensuite, tu me conseille de faire quoi?

                    Parceque j'ai modifié ma fonction pr prendre en compte ton piège, mais je sais pas si il y en a d'autre à ionclure, et ds ce cas, les modifier un par un ds ma fonction deviendrai une mauvaise solution...

                    • Partager sur Facebook
                    • Partager sur Twitter
                      17 juin 2006 à 18:31:43

                      Citation : DelfShkrimm

                      Où il y a ecrit que ca marche pas du tout? oO


                      :-° Mauvaise lecture... Désolé...

                      Citation : Pas de titre



                      Ensuite, tu me conseille de faire quoi?


                      D'analyser la cause du bug et de chercher une solution générale qui le corrige.

                      Citation : Pas de titre


                      Parceque j'ai modifié ma fonction pr prendre en compte ton piège, mais je sais pas si il y en a d'autre à ionclure,


                      à quoi ?

                      Citation : Pas de titre


                      et ds ce cas, les modifier un par un ds ma fonction deviendrai une mauvaise solution...


                      Bonne remarque. Il faut toujours préférer une solution générale. Ensuite, le test unitaire permet de vérifier l'efficacité de la correstion. Tu arrives à "P A S S E D" ou pas ?
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Music only !
                        17 juin 2006 à 18:44:49

                        Ok ok, bah en fait il faudrait que tu m'explique ce que fais
                        =""
                        dans la chaine... Est ce que ça met chaine[0] = '\0' ou ca met rien genre NULL?
                        • Partager sur Facebook
                        • Partager sur Twitter
                          17 juin 2006 à 18:49:39

                          Citation : DelfShkrimm

                          Ok ok, bah en fait il faudrait que tu m'explique ce que fais

                          =""

                          dans la chaine... Est ce que ça met chaine[0] = '\0' ou ca met rien genre NULL?

                          • Partager sur Facebook
                          • Partager sur Twitter
                          Music only !
                            17 juin 2006 à 18:58:20

                            Bon bah :

                            char* strcat(char* chaine1, const char* chaine2)
                            {
                                long i = 0;
                                long j = 0;

                                for(i = 0 ; chaine1[i] != '\0' ; i++)
                                {
                                }
                                do
                                {
                                    chaine1[i] = chaine2[j];
                                    i++;
                                    j++;
                                }
                                while(chaine2[j] != '\0');

                            }


                            Ca d'vrait etre bon
                            • Partager sur Facebook
                            • Partager sur Twitter
                              17 juin 2006 à 22:55:27

                              Citation : DelfShkrimm

                              Ca d'vrait etre bon


                              C'est pas de la magie. Ca passe le test ou pas ? Ben non :

                              ERROR at test 13
                              'a' + 'b' = 'aba'

                              Press ENTER to continue.

                              J'ai ajouté une ligne au test et j'ai rempli la chaine de destination ce caractères connus ("xxx...xx") :

                              #include <stdio.h>
                              #include <stdlib.h>
                              #include <string.h>

                              #define N(a) (sizeof(a)/sizeof*(a))

                              char* str_cat(char* chaine1, const char* chaine2)
                              {
                                  long i = 0;
                                  long j = 0;

                                  for(i = 0 ; chaine1[i] != '\0' ; i++)
                                  {
                                  }
                                  do
                                  {
                                      chaine1[i] = chaine2[j];
                                      i++;
                                      j++;
                                  }
                                  while(chaine2[j] != '\0');

                              }

                              /* ---------------------------------------------------------------------
                                 tu ()
                                 ---------------------------------------------------------------------
                                 test unitaire
                                 ---------------------------------------------------------------------
                                 I:
                                 O:
                                 --------------------------------------------------------------------- */

                              static int tu (void)
                              {
                                 int ret = EXIT_SUCCESS;

                                 struct test
                                 {
                                    unsigned long nb;
                                    struct in
                                    {
                                       char const *a;
                                       char const *b;
                                    }
                                    in;
                                    struct out
                                    {
                                       char const *o;
                                    }
                                    out;
                                 };

                                 static struct test a[] =
                                    {
                                       {
                                          10, "", "", ""},
                                       {
                                          11, "a", "", "a"},
                                       {
                                          12, "", "b", "b"},
                                       {
                                          13, "a", "b", "ab"},
                                    };

                                 int err = 0;
                                 size_t i;

                                 for (i = 0; i < N(a) && !err; i++)
                                 {
                                    struct test const *p = a + i;
                                    char s[] = "xxxxxxxxxxxxx";
                                    char *s_out;

                                    strcpy(s, p->in.a);

                                    /* D.U.T */
                                    s_out = str_cat (s, p->in.b);

                                    if (strcmp (s, p->out.o) != 0)
                                    {
                                       printf ("ERROR at test %lu\n", p->nb);
                                       printf ("'%s' + '%s' = '%s'\n\n", p->in.a, p->in.b, s);
                                       err = 1;
                                    }

                                    if (strcmp (s, s_out) != 0)
                                    {
                                       printf ("ERROR at test %lu\n", p->nb);
                                       printf ("s_out :  '%s' !=  '%s'\n\n", s, s_out);
                                       err = 1;
                                    }
                                 }

                                 if (!err)
                                 {
                                    puts ("\nP A S S E D\n");
                                 }

                                 return ret;
                              }

                              int main()
                              {
                                 tu();
                                 return 0;
                              }

                              Le défaut apparait plus tôt :

                              ERROR at test 12
                              '' + 'b' = 'bxxxxxxxxxxxx'


                              Press ENTER to continue.

                              Visiblement, il manque un 0 quelque part...

                              • Partager sur Facebook
                              • Partager sur Twitter
                              Music only !
                                17 juin 2006 à 23:10:41

                                Mais LOL c'est qoui ça mdr, c'est que je te demande depuis l'bédut! (ou début...) ^^
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  17 juin 2006 à 23:15:43

                                  Citation : DelfShkrimm

                                  Mais LOL c'est qoui ça mdr, c'est que je te demande depuis l'bédut! (ou début...) ^^


                                  Tu a le droit de faire des fautes de frappes, mais tu as le devoir de te relire et de les corriger...

                                  Ensuite, je ne sais pas de quoi tu parles. Tu devrais utiliser le bouton citer Image utilisateur
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                  Music only !
                                    18 juin 2006 à 12:25:22

                                    Désolé j'ai le bras gauche dans le plâtre et j'ai pris l'habitude d'écrire "quoi" "qoui" par faute d'inatention...

                                    Quand à "bédut" c'est une contrepétrie, ca signifie début...

                                    Bon bref, je vois pas trop ce que signifie tout ton code de "test", tout bonement, parce que j'ai jamais rien vu de tel... (et oui je bédute tu sais...)
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      18 juin 2006 à 12:27:03

                                      Salut
                                      Je vais poster mon code de la fonction strcat (je l'ai nommé catchaine :lol: )
                                      La fonction :
                                      char* catchaine(char* chainel,char* chaine2)
                                      {
                                              long i=0;
                                              long y=0;


                                              while(chainel[i] != '\0') //je recherhe le \0
                                              {
                                                      i++;
                                              }
                                       
                                              chainel[i] = chaine2[y];// je remplace le \0 par le 1er caractére de chaine2 en (ici y=0 )
                                              i++;
                                                      y++;
                                             
                                              do
                                              {
                                                      chainel[i]=chaine2[y];
                                                      i++;
                                                      y++;
                                              }
                                      while(chaine2[y] != '\0');//la boule se termine quand y= \0 c'est a dire la fin de chaine2
                                           
                                         return chainel;
                                      }


                                      Le code de main.c (pour tester la fonction):
                                      int main(int argc, char *argv[])
                                      {
                                              char chaine1[100] = "salut ";
                                              char chaine2[] = "Nextrem";

                                          catchaine(chaine1,chaine2);

                                                      printf("%s\n",chaine1);


                                          system("Pause");
                                          return 0;
                                      }

                                      ca me donne
                                      salut Nextrem

                                      et en faisant ca
                                      int main()
                                      {
                                         char s[32] = "";

                                         printf("'%s'\n", s);
                                         str_cat(s, " world");
                                         printf("'%s'\n", s);

                                         return 0;
                                      }

                                      j'ai :
                                      ''
                                      'word'

                                      mais
                                      vous en dites quoi,le code est correct ? en tout cas j'ai suis arrivé a avoir P A S S E D avec le test
                                      ps : désolé pour le fautes d'orthographes :p
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        18 juin 2006 à 15:56:53

                                        Citation : nextrem

                                        et en faisant ca

                                        int main()
                                        {
                                           char s[32] = "";

                                           printf("'%s'\n", s);
                                           str_cat(s, " world");
                                           printf("'%s'\n", s);

                                           return 0;
                                        }


                                        j'ai :

                                        ''
                                        'word'


                                        mais
                                        vous en dites quoi,le code est correct ? en tout cas j'ai suis arrivé a avoir P A S S E D avec le test
                                        ps : désolé pour le fautes d'orthographes :p


                                        Le test ne prétend pas être exhaustif... Effectivement, il y a un problème avec ce test. J'ai modifié mon test unitaire comme ceci :

                                        #include <stdio.h>
                                        #include <stdlib.h>
                                        #include <string.h>

                                        #define N(a) (sizeof(a)/sizeof*(a))

                                        char* catchaine(char* chainel, char* chaine2)
                                        {
                                           long i = 0;
                                           long y = 0;


                                           while (chainel[i] != '\0') //je recherhe le \0
                                           {
                                              i++;
                                           }

                                           chainel[i] = chaine2[y]; // je remplace le \0 par le 1er caractére de chaine2 en (ici y=0 )
                                           i++;
                                           y++;

                                           do
                                           {
                                              chainel[i] = chaine2[y];
                                              i++;
                                              y++;
                                           }
                                           while (chaine2[y] != '\0'); //la boule se termine quand y= \0 c'est a dire la fin de chaine2

                                           return chainel;
                                        }

                                        /* ---------------------------------------------------------------------
                                           tu ()
                                           ---------------------------------------------------------------------
                                           test unitaire
                                           ---------------------------------------------------------------------
                                           I:
                                           O:
                                           --------------------------------------------------------------------- */

                                        static int tu (void)
                                        {
                                           int ret = EXIT_SUCCESS;

                                           struct test
                                           {
                                              unsigned long nb;
                                              struct in
                                              {
                                                 char const *a;
                                                 char const *b;
                                              }
                                              in;
                                              struct out
                                              {
                                                 char const *o;
                                              }
                                              out;
                                           };

                                           static struct test a[] =
                                              {
                                                 {
                                                    10, "", "", ""},
                                                 {
                                                    11, "a", "", "a"},
                                                 {
                                                    12, "", "b", "b"},
                                                 {
                                                    13, "", " b", " b"},
                                                 {
                                                    14, "a", "b", "ab"},
                                              };

                                           int err = 0;
                                           size_t i;

                                           for (i = 0; i < N(a) && !err; i++)
                                           {
                                              struct test const *p = a + i;
                                              char s[] = "xxxxxxxxxxxxx";
                                              char *s_out;

                                              strcpy(s, p->in.a);

                                              /* D.U.T */
                                        #if 1
                                              s_out = catchaine (s, p->in.b);
                                        #else
                                        /* reference */
                                              s_out = strcat (s, p->in.b);
                                        #endif
                                              if (strcmp (s, p->out.o) != 0)
                                              {
                                                 printf ("ERROR at test %lu\n", p->nb);
                                                 printf ("'%s' + '%s' = '%s'\n\n", p->in.a, p->in.b, s);
                                                 err = 1;
                                              }

                                              if (strcmp (s, s_out) != 0)
                                              {
                                                 printf ("ERROR at test %lu\n", p->nb);
                                                 printf ("s_out :  '%s' !=  '%s'\n\n", s, s_out);
                                                 err = 1;
                                              }
                                           }

                                           if (!err)
                                           {
                                              puts ("\nP A S S E D\n");
                                           }

                                           return ret;
                                        }

                                        int main()
                                        {
                                           tu();
                                           return 0;
                                        }

                                        et ça ne passe plus (la fonction est donc bien buggée).

                                        ERROR at test 13
                                        '' + ' b' = ' bxxxxxxxxxxx'

                                        Press ENTER to continue.

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                        Music only !
                                          18 juin 2006 à 17:08:06

                                          Je suis loin d'etre un pro du C et il se peut que la fonction soit buggée mais je commence a douté de ton test tien regarde je le repasse avec la meme fonction mais en ajoutant
                                          chainel[i] = chaine2[y];
                                             i++;
                                             y++;
                                          apres le premier
                                          chainel[i] = chaine2[y]; // je remplace le \0 par le 1er caractére de chaine2 en (ici y=0 )
                                             i++;
                                             y++;

                                          ce qui donne
                                          char* catchaine(char* chainel, char* chaine2)
                                          {
                                             long i = 0;
                                             long y = 0;


                                             while (chainel[i] != '\0') //je recherhe le \0
                                             {
                                                i++;
                                             }

                                             chainel[i] = chaine2[y]; // je remplace le \0 par le 1er caractére de chaine2 en (ici y=0 )
                                             i++;
                                             y++;
                                          chainel[i] = chaine2[y]; // je remplace le \0 par le 1er caractére de chaine2 en (ici y=0 )
                                             i++;
                                             y++;
                                             do
                                             {
                                                chainel[i] = chaine2[y];
                                                i++;
                                                y++;
                                             }
                                             while (chaine2[y] != '\0'); //la boule se termine quand y= \0 c'est a dire la fin de chaine2

                                             return chainel;
                                          }

                                          et la ce me fais passed alors que c'est debile de rajouter ces instructions ,ils sont déja dans le do..while(..);
                                          Alors stp tu pourais me dire ou est l'erreur dans la fonction car j'ai quelques doutes sur ce test etant donné que je n'ai pas le niveau pour comprendre son fonctionnment et je ne vois pas pourquoi (a moin que je n'ai rien compris)
                                          '' + ' b' = ' bxxxxxxxxxxx'dans le test alors qu'en le faisant manuelment ' ' + ' b' donne ' b'
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            18 juin 2006 à 18:05:48

                                            Citation : nextrem

                                            Je suis loin d'etre un pro du C et il se peut que la fonction soit buggée


                                            Ben oui, elle oublie le 0 final. Comme la chaine de destination est pleine de 'x', ça se voit...

                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                            Music only !
                                              18 juin 2006 à 20:47:07

                                              Citation : -ed-

                                              Ben oui, elle oublie le 0 final. Comme la chaine de destination est pleine de 'x', ça se voit...


                                              ah oui c'etait ca le 0 final..boff j'aurais du remarquer que ma fonction n'ajouter pas de \0 a la fin de chaine1(lol je me sens ridicul la surtout apres avoir douté de ta fonction de test :-° )
                                              ce code devrai etre le bon
                                              char* catchaine(char* chainel, char* chaine2)
                                              {
                                                 long i = 0;
                                                 long y = 0;


                                                 while (chainel[i] != '\0') //je recherhe le \0
                                                 {
                                                    i++;
                                                 }


                                                 do
                                                 {
                                                    chainel[i] = chaine2[y];
                                                    i++;
                                                    y++;
                                                 }
                                                 while (chaine2[y] != '\0'); //la boule se termine quand y= \0 c'est a dire la fin de chaine2

                                                 chainel[i]='\0';// on ajoute un \0 a chainel
                                                 return chainel;
                                              }

                                              ca fais P A S S ED au test
                                              • Partager sur Facebook
                                              • Partager sur Twitter

                                              [Exo chaines] Solutions

                                              × 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