Partage
  • Partager sur Facebook
  • Partager sur Twitter

probleme avec l'ecriture de la fonction strchr

demande d'aide de la pars d'un zero ! HELP !

Sujet résolu
    27 juillet 2006 à 16:58:27

    Bonjour tous le monde , alors voila j'en suis a ecrire la fonction strchr et j'ai un pb voila le code(j'ai pas trod eu le temps de le faire parceque je devais partir mais j'ai esayer plusieur posibliter et rien marche) :
    #include <stdio.h>
    #include <stdlib.h>

    char* cherche(const char* chaine, int caractereARechercher);

    int main(int argc, char *argv[])
    {
        char chaine[] = "Texte de test", *suiteChaine = NULL;

        suiteChaine = cherche(chaine, 'd');
        if (suiteChaine != NULL)   
        {
            printf("Voici la fin de la chaine a partir du premier d : %s", suiteChaine);
        }

        return 0;
    }
    char* cherche(const char* chaine, int caractereARechercher)
    {
        long i = 0 , *resultat = NULL;
       
        for(i = 0 ; chaine[i] != caractereARechercher ; i++)
        {
              if (chaine [i] == caractereARechercher)
              {
                         *resultat = &chaine[i];
              }
              else
              {
                         i++;         
              }
        }
      return resultat;
    } 

    a la compilation ca me marque : "invalid conversion from 'const char*' to 'long int'" et "cannot convert 'long int*' to'char*' in return"
    voila , la j'avoue etre un poil perdu si vous pouriez m'aider ca serait simpas , merci d'avance.
    • Partager sur Facebook
    • Partager sur Twitter
      27 juillet 2006 à 17:07:00

      Dans ta fonction, caractereARechercher ne doit pas etre de type int mais de type char (pas char*, ni char[]).

      Aussi, ta fonction doit retourner un char*, et tu fais return resultat, or, resultat est de type long, il y a donc un problème ! >_<
      • Partager sur Facebook
      • Partager sur Twitter
        27 juillet 2006 à 17:21:32

        tu peux simplement :
        return resultat;
        par
        return chaine[resultat];
        • Partager sur Facebook
        • Partager sur Twitter
          27 juillet 2006 à 20:39:45

          Citation : guimers8

          Dans ta fonction, caractereARechercher ne doit pas etre de type int


          Pourquoi ? Une constante caractère est de type int, non ? De plus, lorsqu'on défini un paramètre de type char, il est converti en int, ce qui fait du code invisible en plus. Il est donc inutile de définir un paramètre de type char. Utiliser int directement.
          • Partager sur Facebook
          • Partager sur Twitter
          Music only !
            27 juillet 2006 à 20:42:14

            Citation : -ed-

            Citation : guimers8

            Dans ta fonction, caractereARechercher ne doit pas etre de type int


            Pourquoi ? Une constante caractère est de type int, non ? De plus, lorsqu'on défini un paramètre de type char, il est converti en int, ce qui fait du code invisible en plus. Il est donc inutile de définir un paramètre de type char. Utiliser int directement.


            D'accord, désolé .. :euh:

            Mais bon, je ne sais pas si c'etait volontaire de la part du canard enragé.
            • Partager sur Facebook
            • Partager sur Twitter
              27 juillet 2006 à 20:45:00

              Citation : le_canard_enrager

              Bonjour tous le monde , alors voila j'en suis a ecrire la fonction strchr et j'ai un pb voila le code(j'ai pas trod eu le temps de le faire parceque je devais partir mais j'ai esayer plusieur posibliter et rien marche) :
              <...> a la compilation ca me marque : "invalid conversion from 'const char*' to 'long int'" et "cannot convert 'long int*' to'char*' in return"
              voila , la j'avoue etre un poil perdu si vous pouriez m'aider ca serait simpas , merci d'avance.


              Normal, une * en trop...

              Un for(), c'est comme un while(). Si la condition est vraie, la boucle n'est pas effectuée.

              Ton code corrigé. Pose des questions si tu ne comprends pas :

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

              static char *cherche (const char *chaine, int caractereARechercher)
              {
                 char *resultat = NULL;
                 size_t i = 0;

                 for (i = 0; chaine[i] != 0; i++)
                 {
                    if (chaine[i] == caractereARechercher)
                    {
                       resultat = (char *) (chaine + i);
                       break;
                    }
                    else
                    {
                       i++;
                    }
                 }
                 return resultat;
              }

              int main ()
              {
                 char chaine[] = "Texte de test", *suiteChaine = NULL;

                 suiteChaine = cherche (chaine, 'd');
                 if (suiteChaine != NULL)
                 {
                    printf ("Voici la fin de la chaine a partir du premier d : %s\n", suiteChaine);
                 }

                 return 0;
              }
              • Partager sur Facebook
              • Partager sur Twitter
              Music only !
                27 juillet 2006 à 22:25:17

                ok merci boucoup pour votre aide precieuse , je vais voir ca et encore merci ^^
                Edit: heu . . ya un truc qui me posse probleme (enfin le code marche bien sur) mais je comprend pas trod cette ligne = > "resultat = (char *) (chaine + i);"
                j'ai bien compri que resultat est un pointeur qui doit prendre pour valeur l'adresse du caractere 'd' <===(je me trompe pas nes pas ? :p ) mais j'ai esayer d'enlever "(char*)" et sa marche exatement pareil , pourquoi ? Et n'y a il pas un autre moyen de marquer "(chaine + i)" , Parceque ca non plus j'ai pas trod compri , donc peu etre quand le marquan differament ou en m'explican je comprendrai , merci de votre aide. :ange:
                PS : j'ai esayer "chaine[i]" a la place de "(chaine + i)" mais sa marche pas , pourquoi ?
                • Partager sur Facebook
                • Partager sur Twitter
                  28 juillet 2006 à 0:05:43

                  Citation : le_canard_enrager

                  <...>je comprend pas trod cette ligne = > "resultat = (char *) (chaine + i);"
                  j'ai bien compri que resultat est un pointeur qui doit prendre pour valeur l'adresse du caractere 'd' <===(je me trompe pas nes pas ? :p )


                  Oui.

                  Citation : Pas de titre


                  mais j'ai esayer d'enlever "(char*)" et sa marche exatement pareil , pourquoi ?


                  Ca marche parce que la valeur est bonne, mais le type est différent. chaine + i est du type char const *, alors que le type retourné attendu est de type char *, d'où l'opérateur de transtypage (char *). (aka cast ou typecast)

                  Citation : Pas de titre


                  Et n'y a il pas un autre moyen de marquer "(chaine + i)" ,


                  On peut certainement faire plus compliqué, mais ce n'est pas mon genre...

                  Citation : Pas de titre

                  Parceque ca non plus j'ai pas trod compri , donc peu etre quand le marquan differament ou en m'explican je comprendrai , merci de votre aide.


                  Je rappelle qu'une chaine de carctères en C est un tableau de char initialisé et terminé par un 0. Chaque élément est un char. Le nom du tableau (chaine) est l'adresse du premier élément du tableau. On peut l'écrire
                  chaine

                  ou
                  chaine + 0

                  (ben oui, c'est pareil) ou encore, si on aime la complication :
                  &chaine[0]

                  Donc
                  chaine + i
                  désigne l'adresse du caractère de rang i. Tout simplement.

                  Citation : Pas de titre

                  PS : j'ai esayer "chaine[i]" a la place de "(chaine + i)" mais sa marche pas , pourquoi ?


                  Parce que chaine[i] désigne le caractère lui-même et non son adresse.
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Music only !
                    28 juillet 2006 à 0:12:04

                    Mille merci pour cette super reponse -ed- mintenan j'ai compris , merci infiniment ^^
                    • Partager sur Facebook
                    • Partager sur Twitter

                    probleme avec l'ecriture de la fonction strchr

                    × 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