Partage
  • Partager sur Facebook
  • Partager sur Twitter

[C] Question sur exercice du cours

Chapitre: Les chaînes de caractères

Sujet résolu
    18 juin 2006 à 15:14:03

    Bonjour.
    J'ai "terminé" la lecture du cours sur les chaînes de caractères et j'ai donc commencé à faire les exercices proposés à la fin du cours.
    J'ai essayé de re-faire la fonction qui permet de rechercher un caractère dans une chaîne de caractère.
    Je pense avoir réussi, même si je ne sais comment certifier à 100% que ma méthode marche dans tous les cas.
    Voici donc ma fonction:

    char* recherche(const char* chaine, int charRechercher)
    {
        int i=0;
        char caractereActuel;
        long leRetour;
       
        do
        {
             caractereActuel = chaine[i];
             if(caractereActuel == charRechercher)
             {
                                leRetour = chaine;
                                leRetour = leRetour + i;
                                return leRetour;
             }
             i++;
        }while(caractereActuel != 0);
         
          return NULL;
    }


    Logiquement, la fonction marche. Mais j'ai un petit problème.
    Comme on le voit aux lignes suivantes:

                                leRetour = chaine;
                                leRetour = leRetour + i;
                                return leRetour;


    A-t-on le droit d'ajouter une valeur comme je l'ai fait sachant que c'est une adresse que je modifie ?

    PS: Je m'excuse d'avance si je n'ai pas employé les bons termes pour certaines choses.

    Merci d'avance à tous ceux qui répondront à ma question.
    • Partager sur Facebook
    • Partager sur Twitter
      18 juin 2006 à 15:39:47

      Slt !

      Sauf erreur de ma part, ca ne marche pas de parcourir les adresses comme tu le fais. Tu risques de te retrouver avec des valeurs dont tu n'auras aucune idée d'ou elles viennent.
      Je pense que tu vas devoir trouver un autre moyen.

      Si j'ai bien compris, ta fonction recherche le "charRechercher" dans "chaine" en la parcourant. Pourqoui alors ne pas faire un truc du genre:
      char* recherche(const char* chaine, int charRechercher)
      {
          int i=0;
          char caractereActuel;
              char* charPointer = NULL;
         
          do
          {
               caractereActuel = chaine[i];
               if(caractereActuel == charRechercher)
               {
                                  charPointer = &chaine[i];
                                  return charPointer;
               }
               i++;
          }while(caractereActuel != 0);
           
            return NULL;
      }

      Cette fonction renvoie un pointeur sur le caractere recherché dans la chaine.

      Enfin, evites le leRetour = leRetour + i;, ca ne fait pas propre.
      Remplaces le par : leRetour+=i;

      Voilou ;)
      ++ !NiCo!
      • Partager sur Facebook
      • Partager sur Twitter
        18 juin 2006 à 15:52:24

        Je te remercie de m'avoir répondu.
        Oui, c'est exactement ce que je voulais faire, et après avoir bien regardé ta méthode, je me dit que j'ai cherché compliqué.

        Citation : !NiCo!

        Sauf erreur de ma part, ca ne marche pas de parcourir les adresses comme tu le fais. Tu risques de te retrouver avec des valeurs dont tu n'auras aucune idée d'ou elles viennent.


        C'était ma principale question, et je me doutais bien que ce que j'avais fait ne devait pas être très clair.

        Hé bien je te remercie encore, bonne journée.
        • Partager sur Facebook
        • Partager sur Twitter
          18 juin 2006 à 19:10:37

          J'ai essayé de compiler ton code mais il ne marche pas :( .Je cherchais en fait une correction a cet exo mais ca affiche la meme chose avec toi qu'avec moi.
          Voila ce qu'ecrit mon IDE a la compilation : error : invalide conversion from `const char*' to `char *'.
          As tu la meme erraur ? Si oui ou es que ca coince :euh: ?
          • Partager sur Facebook
          • Partager sur Twitter
            18 juin 2006 à 19:46:04

            char* recherche(const char* chaine, int charRechercher)
            {
                int i=0;
                char caractereActuel;
                long leRetour;
               
                do
                {
                     caractereActuel = chaine[i];
                     if(caractereActuel == charRechercher)
                     {
                                        leRetour = chaine;
                                        leRetour = leRetour + i;
                                        return leRetour;
                     }
                     i++;
                }while(caractereActuel != 0);
                 
                  return NULL;
            }


            Bon déjà tu return deux choses dans le cas où il y a un caractère recherché !! o_O

            Ensuite tu veux que leRetour soit égal à chaine il faut utiliser strcpy et pas = !

            En reprenant le code de !Nico! :
            char* recherche(const char* chaine, int charRechercher)
            {
                int i=0, ok = 0;
                char caractereActuel;
                    char* charPointer = NULL;
               
                do
                {
                     caractereActuel = chaine[i];
                     if(caractereActuel == charRechercher)
                     {
                                        charPointer = &chaine[i];
                                        ok = 1;
                     }
                     i++;
                }while(caractereActuel != 0);
                 
                  if(ok)
                      return charPointeur;
                  else
                      return NULL;
            }


            Valà ça devrait marcher !
            Par contre pour ensuite faire un tableau de charPointeur, il te faudra faire une allocation dynamique, ce que tu verra plus tard !
            • Partager sur Facebook
            • Partager sur Twitter
              19 juin 2006 à 11:04:07

              Oui, excuse moi j'ai codé un truc a l'arrache hier soir pour te repondre vite fait mais j'avais rien verifié du tout.
              Voila une maniere de coder la recherche de caractere:
              char* recherche(const char* chaine, char charRechercher)
                             {
                                  long i = 0;
                                  char  *chaineCherche = NULL ;

                                  while( chaine[i]!='\0' && charRechercher != chaine[i] )
                                  {
                                                 i++;
                                  }

                                  if (charRechercher == chaine[i])
                                  {
                                     chaineCherche= (char*) &chaine[i];
                                      return  chaineCherche;
                                  }

                                  else
                                  {
                                             return NULL;
                                  }
                              }
              • Partager sur Facebook
              • Partager sur Twitter
                19 juin 2006 à 11:41:28

                Bonjour,

                hmmm ...
                Juste une petite question concernant le code.

                                    if (charRechercher == chaine[i])
                                    {
                                       chaineCherche= (char*) &chaine[i];
                                        return  chaineCherche;
                                    }


                A quoi sert exactement le (char*) devant &chaine[i] ?
                Parceque j'ai essayé de le mettre sans, et de l'enlever en mettant un printf() pour tester sa valeur, et je me retrouve avec la même valeur dans les deux cas.

                Merci d'avance pour votre réponse.
                • Partager sur Facebook
                • Partager sur Twitter
                  19 juin 2006 à 11:52:06

                  Citation : Pierre89

                  Bon déjà tu return deux choses dans le cas où il y a un caractère recherché !! o_O



                  il est impossible de retourner deux choses, le programme arrive à la première, retourne la valeur et sort directement de la fonction, il n'arrive pas au deuxième return.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    19 juin 2006 à 16:18:22

                    Merci pour la précision (donc un return c'est comme un break mais pour une fonction ?!)
                    • Partager sur Facebook
                    • Partager sur Twitter

                    [C] Question sur exercice du cours

                    × 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