Partage
  • Partager sur Facebook
  • Partager sur Twitter

[C] recoder strcpy

chaînes de caractères

    11 avril 2006 à 17:38:13

    salut tout le monde :)

    voilà, je suis en train de refaire les fonctions de string.h qu'on a vu dans la cours comme nous le demande m@ateo. je viens juste de commencer avec strcpy et déja il y a une erreur.
    donc voici mon code :

    #include <stdio.h>
    #include <stdlib.h>
    //prototypes
    int comparer(const char* chaine1, const char* chaine2);

    int main(int argc, char *argv[])
    {
    char chaine[] = "texte de test";
    char copie[] = "texte de test";

    /*on teste la valeur renvoyée par la fonction comparer pour voir si les chaine sont identiques*/
    if(comparer(chaine, copie) == 0)
    {
        printf("les chaines sont identiques");
    }
    else
    {
        printf("les chaines sont differentes");
    }
      getchar();
      return 0;
    }

    //fonction qui compare 2 chaines
    int comparer(const char* chaine1, const char* chaine2)
    {
        int i =0;
        int comparaison = 0;
        do
        {
            if(chaine1[i] == chaine2[i])
           {
            comparaison =0;
           }
           else
           {
               comparaison =1;
           }
          i++;
          }while(chaine1 !='\0'  && chaine2 !='\0');
        return comparaison;
    }

    alors, la compilation fonctionne mais quand j'exécute, une console vide s'affiche et windows m'affiche le message d'erreur suivant :
    console.exe a rencontré un problème et doit fermer. Nous vous prions de nous excuser pour le désagrèment encouru.


    le problème vient sûrement d'un dépassement de mémoire mais je ne trouve pas mon erreur.

    merci d'avance pour vos réponses ;)
    • Partager sur Facebook
    • Partager sur Twitter
      11 avril 2006 à 17:52:45

      Citation : theghost


      donc voici mon code :


      int comparer(const char* chaine1, const char* chaine2)
      {
            }while(chaine1 !='\0'  && chaine2 !='\0');
      }



      Tu compares des objets invariants -> boucle infinie...

      Ce ne sont pas mes pointeurs qu'il faut tester, ce sont les caractères courants...
      • Partager sur Facebook
      • Partager sur Twitter
      Music only !
        11 avril 2006 à 18:04:40

        ok, merci -ed-.
        j'ai modifié le code :
        int comparer(const char* chaine1, const char* chaine2)
        {
            int i =0;
            int comparaison = 0;
            do
            {
                if(chaine1[i] == chaine2[i])
               {
                comparaison =0;
               }
               else
               {
                comparaison =1;
               }
              i++;
              }while(chaine1[i] !='\0'  && chaine2[i] !='\0');
        return comparaison;
        }


        mais le programme m'affiche "les chaines sont identiques" même si les chaines testées son différentes. o_O
        • Partager sur Facebook
        • Partager sur Twitter
          11 avril 2006 à 18:10:26

          Citation : theghost



                  if(chaine1[i] == chaine2[i])
                 {
                  comparaison =0;
                 }
                 else
                 {
                  comparaison =1;
                 }

          return comparaison;
          }


          mais le programme m'affiche "les chaines sont identiques" même si les chaines testées son différentes.


          Problème d'algo. A la première différence, il faut quitter... Il sont très bien ces petits exercices... Hé hé. Ils font réfléchir !

          • Partager sur Facebook
          • Partager sur Twitter
          Music only !
          Anonyme
            11 avril 2006 à 18:11:44

            Petit problème de logique : ici, quand les caractères sont différents, il met comparaison à 1, mais si les caractères suivants sont les mêmes il le remet à 0.

            La solution : dès qu'on trouve deux caarctères non égaux, quitter, ça sert à rien de continuer ;)
            • Partager sur Facebook
            • Partager sur Twitter
              11 avril 2006 à 18:14:16

              on peur utiliser break; pour quitter la boucle ?
              • Partager sur Facebook
              • Partager sur Twitter
                11 avril 2006 à 18:14:53

                Citation : theghost

                on peur utiliser break; pour quitter la boucle ?


                Moui...
                • Partager sur Facebook
                • Partager sur Twitter
                Music only !
                Anonyme
                  11 avril 2006 à 18:16:33

                  Pourquoi quitter la boucle quand il est plus simple de quitter directement la fonction :p ?
                  • Partager sur Facebook
                  • Partager sur Twitter
                    11 avril 2006 à 18:17:57

                    int comparer(const char* chaine1, const char* chaine2)
                    {
                        int i =0;
                        int comparaison = 0;
                        do
                        {
                            if(chaine1[i] == chaine2[i])
                           {
                            comparaison =0;

                           }
                           else
                           {
                            comparaison =1;
                            break;
                           }
                          i++;
                          }while(chaine1[i] !='\0'  && chaine2[i] !='\0' || chaine1[i] == chaine2[i]);
                        return comparaison;
                    }


                    arf, j'ai réussi en ajoutant une instruction break. ;)
                    merci à tous. au tour de strcat maintenant ! :p

                    Citation : louisclem

                    Pourquoi quitter la boucle quand il est plus simple de quitter directement la fonction :p ?



                    comment faire ?
                    • Partager sur Facebook
                    • Partager sur Twitter
                      11 avril 2006 à 18:20:55

                      Citation : theghost

                      arf, j'ai réussi en ajoutant une instruction break. ;)
                      merci à tous.


                      Moui, mais la vrai fonction strcmp() se comporte autrement. Elle renvoie +1,0,-1 selon la différence...
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Music only !
                        11 avril 2006 à 18:24:32

                        Citation : -ed-

                        Moui, mais la vrai fonction strcmp() se comporte autrement. Elle renvoie +1,0,-1 selon la différence...



                        ok, je vais essayer.

                        PS : je viens de me rendre que je me suis trompé dans le titre, il s'agit de strcmp et non pas de strcpy.
                        • Partager sur Facebook
                        • Partager sur Twitter
                          11 avril 2006 à 20:31:05

                          Tu pouvais aussi tout simplement affecter comparaison à 1 et ne le mettre à zéro que si tous les caractères étaient identiques ;) .

                          Soit :

                          int mincmp(const char *s, const char *t)
                          {
                              int i;
                             
                              i = 1;
                              while((*s++ == *t++))
                                  i = 0;
                              return i;
                          }


                          M'enfin chacun sa technique :) .

                          ++ !
                          • Partager sur Facebook
                          • Partager sur Twitter
                            11 avril 2006 à 20:36:45

                            oui, j'avoue que ta méthode est plus "pro" :p
                            • Partager sur Facebook
                            • Partager sur Twitter
                              11 avril 2006 à 20:44:37

                              et surtout beaucoup plus rapide!! oO
                              • Partager sur Facebook
                              • Partager sur Twitter
                                11 avril 2006 à 20:48:19

                                Bah pas tellement, c'est juste des pointeurs ;)

                                (en fait refaire strcat avec pointeurs c'est un exo du K&R, une fois que tu l'as trouvé les autres fonctions c'est du gâteau :-° )
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  11 avril 2006 à 20:48:39

                                  mleg > ta technique retourne i=0 du moment que les 2 première lettre sont égale, non ?
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    11 avril 2006 à 20:50:46

                                    Citation : mleg

                                    Tu pouvais aussi tout simplement affecter comparaison à 1 et ne le mettre à zéro que si tous les caractères étaient identiques ;) .

                                    Soit :

                                    int mincmp(const char *s, const char *t)
                                    {
                                        int i;
                                       
                                        i = 1;
                                        while((*s++ == *t++))
                                            i = 0;
                                        return i;
                                    }



                                    M'enfin chacun sa technique :) .


                                    Tu as testé ? Et ça s'arrête comment en cas d'égalité ? Parce que 0 == 0, ça fait 1 !
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    Music only !
                                      11 avril 2006 à 20:53:07

                                      Po con faut que je teste tiens. Je vais encore m'être planté...

                                      Décidément mes fonctions de chaînes sont truffées d'erreurs, faudra que je m'y repenche dessus. :-°
                                      • Partager sur Facebook
                                      • Partager sur Twitter

                                      [C] recoder strcpy

                                      × 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