Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème pour faire une fonction qui concatène 2 chaines

elle ne fonctionne pas

Sujet résolu
    13 mai 2006 à 12:34:42

    Salut, j'ai essayé de faire la fonction strcat sauf qu'en plus je veux que cette fonction mette un espace entre les deux chaines, mais elle ne fonctionne pas et je ne vois pas pourquoi :(

    Voici mon code:
    #include <stdio.h>
    #include <stdlib.h>


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


    int main(int argc, char *argv[])
    {

       char chaine1[] = "Salut", chaine2[] = "tout le monde";



        concatenerChaine(chaine1, chaine2);
        printf("%s", chaine1);




        return 0;
    }

    char* concatenerChaine(char* chaine1, const char* chaine2)
    {
       char caractereActuel = 0, caractereActuel2 = 0;
       long nombreCaracteres = 0, nombreCaracteres2 = 0, i = 0, nombreTotal = 0;

       do
       {
            caractereActuel2 = chaine2[nombreCaracteres2];
           nombreCaracteres2++;

       } while (caractereActuel2 != '\0');


       do
       {
           if(caractereActuel == '\0')
           {
               chaine1[nombreCaracteres] = ' ';
           }

           caractereActuel = chaine1[nombreCaracteres];

           nombreCaracteres++;

       } while (caractereActuel != '\0');

       nombreTotal = nombreCaracteres + nombreCaracteres2;

       while (i <= nombreTotal)
       {
           if (i > nombreCaracteres)
           {
               chaine1[i] = chaine2[i - nombreCaracteres];
           }

           i++;
       }

       return chaine1;
    }


    Voilà est-ce que vous pouvez m'aider?

    Merci d'avance
    • Partager sur Facebook
    • Partager sur Twitter
      13 mai 2006 à 16:37:44

      salut the basher tu fais toujours la meme erreur...


      ne met pas tes variable a 0 pour les initialiser si derriere tu as une condition en '\0', car c est le meme code en ascii !
      • Partager sur Facebook
      • Partager sur Twitter
        13 mai 2006 à 16:43:23

        Moi à ta place je ferais un truc comme ça :
        #define strspacecat(a,b) (strcat(strcat(a," "),b))


        Ou alors :
        char* strspacecat(const char* a,const char* b)
        {
            int lga,lgb,i=0;
            char* retour;

            lga = strlen(a);
            lgb = strlen(b);

            retour = (char*)malloc(lga+lgb+2);

            for(;i<lga;i++) { retour[i] = a[i]; }
            a[lga] = ' ';
            for(i++;i<lga+lgb+2;i++) { retour[i] = b[i]; }

            return retour;
        }

        (il se peut qu'il y ait une erreur, je n'ai pas testé le code)
        • Partager sur Facebook
        • Partager sur Twitter
          13 mai 2006 à 16:49:04

          salut remram tu saurais m expliquer ce qu est un cast et a quoi ca sert ?
          • Partager sur Facebook
          • Partager sur Twitter
            13 mai 2006 à 17:24:20

            Je vais tester le code mais ça fait quoi le 'malloc'??

            EDIT

            j'ai modifié un peu le code, il marche presque, en fait le probleme ce que les 2 chaines sont collées, il n'y a pas d'espace :(
            Voici le code:
            char* strspacecat(const char* chaine1, const char* chaine2)
            {
                int longueurChaine1 = 0, longueurChaine2 = 0, i = 0, p = 0;
                char* retour;

                longueurChaine1 = strlen(chaine1);
                longueurChaine2 = strlen(chaine2);

                retour = (char*)malloc(longueurChaine1 + longueurChaine2 + 2);

                for (i; i < longueurChaine1; i++)
                {
                    retour[i] = chaine1[i];
                }

                retour[longueurChaine1] = ' ';

                for (i; i < (longueurChaine1 + longueurChaine2 + 2); i++)
                {
                    retour[i] = chaine2[p];
                    p++;
                }

                return retour;
            }


            Est-ce que vous pouvez m'aider?
            • Partager sur Facebook
            • Partager sur Twitter
              13 mai 2006 à 17:28:13

              malloc tu verras dans la suite du cours ca permet de reserver de l espace en memoire pour ton tableau.
              • Partager sur Facebook
              • Partager sur Twitter
                13 mai 2006 à 17:29:28

                D'accord, donc est-ce que quelqu'un pourrait m'aider pour mettre un espace entre les 2 chaines?

                merci d'avance
                • Partager sur Facebook
                • Partager sur Twitter
                  13 mai 2006 à 17:36:13

                  Ma fonction le fait, non ?
                  Sinon, un cast est un transtypage en C.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    13 mai 2006 à 17:48:00

                    Non, moi aussi je pensais qu'elle le ferait mais elle ne le fait pas^^
                    Alors est-ce qu'on pourrait me dire comment faire pour qu'elle mette un espace entre les 2 chaines?

                    merci d'avance
                    • Partager sur Facebook
                    • Partager sur Twitter
                      14 mai 2006 à 10:21:04

                      Personne ne peut m'aider pour que la fonction mette un espace entre les 2 chaines?

                      Merci d'avance
                      • Partager sur Facebook
                      • Partager sur Twitter
                        15 mai 2006 à 15:33:16

                        Aidez moi s'il vous plait
                        • Partager sur Facebook
                        • Partager sur Twitter
                          15 mai 2006 à 15:56:29

                          Modification de ton truc (qui n'est pas le plus simple, autant utiliser des strcat comme expliqué plus haut...):

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

                          char* strspacecat(const char* chaine1, const char* chaine2)
                          {
                              int longueurChaine1 = 0, longueurChaine2 = 0, i = 0, p = 0;
                              char* retour;

                              longueurChaine1 = strlen(chaine1);
                              longueurChaine2 = strlen(chaine2);

                              retour = (char*)malloc(longueurChaine1 + longueurChaine2 + 2);

                              for (i=0; i < longueurChaine1; i++)
                              {
                                  retour[i] = chaine1[i];
                              }

                              retour[longueurChaine1] = ' ';

                              for (i=longueurChaine1+1; i < (longueurChaine1 + longueurChaine2 + 1); i++)
                              {
                                  retour[i] = chaine2[p];
                                  p++;
                              }
                              retour[longueurChaine1 + longueurChaine2 + 1] = 0;

                              return retour;
                          }

                          int main(void)
                          {
                            char un[]= "coucou";
                            char deux[]= "john";
                            char * trois = strspacecat(un,deux);
                            printf("%s - %s - %s\n",un,deux,trois);
                            free(trois);
                            return 0;
                          }


                          Perso j'aurais fait :p :
                          #include <string>
                          #include <iostream>

                          using namespace std;

                          int main()
                          {
                            string un = "coucou";
                            string deux = "john";
                            string trois = un + " " + deux;
                            cout << un << " - " <<deux << " - " << trois << endl;
                          }
                          • Partager sur Facebook
                          • Partager sur Twitter
                            15 mai 2006 à 16:52:41

                            Citation : Kayl

                            Modification de ton truc (qui n'est pas le plus simple, autant utiliser des strcat comme expliqué plus haut...):



                            En fait je fais ça pour m'entrainer

                            Sinon merci ton code marche très bien :)

                            Mais c'est pas possible de mettre le free dans la fonction?


                            • Partager sur Facebook
                            • Partager sur Twitter
                              15 mai 2006 à 16:55:41

                              Ben non si tu veux retourner quelque chose il faut pas le libérer.
                              Tu peux aussi passer un 3ème pointeur à ta fonction, celui du résultat, mais il doit deja etre alloué et de la bonne taille).
                              A toi de voir.
                              • Partager sur Facebook
                              • Partager sur Twitter
                                15 mai 2006 à 16:57:14

                                Le passage par les pointeurs aurait été plus judicieux je pense :

                                char* space_cat(char *s, const char *t)
                                {
                                    while(*++s)
                                        ;
                                    *s = ' ';
                                    while(*++s = *t++)
                                        ;
                                    return s;
                                }


                                Chacun sa méthode, le but c'était de réfléchir à l'algo. ;)
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  15 mai 2006 à 16:57:43

                                  D'accord, non je disais ça parcequ'il faut y penser à le mettre le free^^

                                  Sinon merci de votre aide
                                  • Partager sur Facebook
                                  • Partager sur Twitter

                                  Problème pour faire une fonction qui concatène 2 chaines

                                  × 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