Partage
  • Partager sur Facebook
  • Partager sur Twitter

fonctions de string.h

    31 juillet 2006 à 21:54:28

    Salut,
    J’ai réussi a faire 2 des fonctions de la librairie string.h que l’on doit s’entraîner a refaire :

    strcpy : copier une chaîne dans une autre



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

    long* copierChaine(char* copieDeLaChaine, const char* chaineACopier);

    int main(int argc, char *argv[])
    {
        char Chaine[] = "blabla", Copie[100];
     
      copierChaine( Copie, Chaine);
      printf("Chaine vaut: %s \n",Chaine);
      printf("Copie vaut: %s \n",Copie );
       
       printf("\n");
      system("PAUSE");     
      retu<titre1></titre1>rn 0;
    }

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


    Et


    strcmp : comparer 2 chaînes



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

    long comparerChaine(const char* chaine1, const char* chaine2);

    int main(int argc, char *argv[])
    {
       
        char chaine1[] = "salut", chaine2[] = "salut";
      printf("strcmp :comparer des chaines\n");
     
      if(comparerChaine( chaine1,  chaine2)== 0)
      { printf("Les chaines sont identiques\n");
                         }
      else
      {
          printf("Les chaines sont differentes\n");
      }                   
     
        system("PAUSE");   
      return 0;
    }

    long comparerChaine(const char* chaine1, const char* chaine2)
    {
    long i = 0, diff = 0;
    char caractere1 = 0, caractere2=0;
         
         do
         {
              caractere1 =   chaine1[i]
             caractere2  = chaine2[i]  ;
               
              i++;
              if(caractere1 != caractere2)
              {
                   diff += 1;       
                            }
          }while (caractere1 != '\0');
         
        return diff; 
    }


    Ici si tous les caractères sont identiques elle renvoie 0 sinon elle renvoie 1. Mais comment faire pour qu’elle renvoie un nombre négatif ou positif dépendant de la supériorité de caractères de chaque chaîne comme a dit M@teo dans le tuto.

    Citation : M@teo
    La fonction compare les valeurs de chacun des caractères un à un. Si tous les caractères sont identiques, elle renvoie 0. Si les caractères de la chaine1 sont supérieurs à ceux de la chaine2, la fonction renvoie un nombre positif. Si c'est l'inverse, la fonction renvoie un nombre négatif.



    Mais pour strcat(concaténer 2 chaînes) et strchr (rechercher un caractère) je me suis coincée totalement et je n’ai même pas une idée pour un petit bout de code.
    Voilà les prototypes des fonctions :

    • strcat : concaténer 2 chaînes :
    char* strcat(char* chaine1, const char* chaine2);
    • strchr : rechercher un caractère :
    char strchr(const char*chaine, int caractereARecherche);


    Merci d’avance !!!
    • Partager sur Facebook
    • Partager sur Twitter
      31 juillet 2006 à 21:57:38

      pour renvoyer -1/1, tu fais juste :
      if(caractere1 < caractere2)
      return -1;
      else if(caractere1 > caractere2)
      return 1;


      pas bsoin de compter le nombre de caractères différents.
      • Partager sur Facebook
      • Partager sur Twitter
        2 août 2006 à 20:54:28

        Toc Toc Toc !
        Ya quelqu'en?
        Please repondez cé pas gentil
        • Partager sur Facebook
        • Partager sur Twitter
          3 août 2006 à 6:39:34

          Une fonction strcmp:
          int Compare(char* chaine1, char* chaine2) {
              int i = 0, egal = 0, plus = 0;
              int poids1 = 0, poids2 = 0;

              if (Longueur_Chaine(chaine1) < Longueur_Chaine(chaine2))
                  plus = Longueur_Chaine(chaine2);
              else
                  plus = Longueur_Chaine(chaine1);
              for(i=0; i<plus+1; i++) {
                  if(chaine1[i] != chaine2[i])
                      egal++;
                  poids1 += chaine1[i];
                  poids2 += chaine2[i];
              }
              if (egal != 0) {
                  if (poids1 > poids2)
                      return 1;
                  if (poids2 > poids1)
                      return -1;
              }
              else
                  return 0;
          }


          strchr:
          Il te suffit de parcourir ta chaine avec une boucle et dès que tu trouve le caractère recherché tu renvoies un pointeur sur la fin de la chaine.
          Disons que i est l'indice du premier caractère trouvé dans la chaine, tu fait return &chaine[i] et si tu ne trouve pas de caractère tu fait return NULL.

          strcat:
          Il faut bien vérifier que ta première chaine est assez longue pour accueillir la deuxième puis tu la rajoute à la fin. C'est assez simple.
          • Partager sur Facebook
          • Partager sur Twitter
            3 août 2006 à 10:23:35

            Moi aussi j'ai essayé :p
            Voilà ma fonction strcat, par contre moi je l'ai laissé dans le main :
            #include <stdio.h>
            #include <stdlib.h>
            #include <string.h>

            /*fonction imitant strcat*/



            int main(int argc, char *argv[])
            {
                char chaine1[20] = "Salut ", chaine2[] = "Thomas";
                char chaineConcatenee[1000];
                long i = 0, j = 0;


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

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


                printf("la chaine1 est %s\n", chaineConcatenee);
                printf("la chaine2 est %s\n", chaine2);

                getchar();
                return 0;
            }


            [EDIT] comment affecté la chaine de chaineConcatenee à chaine1 ??
            • Partager sur Facebook
            • Partager sur Twitter
              3 août 2006 à 10:34:30

              Si tu veux copier chaineConcatenee dans chaine1 tu peut utiliser la fonction strcpy().
              Mais puisque vous êtes dans le recodage de fonctions tu peut aussi recoder strcpy() ;)
              • Partager sur Facebook
              • Partager sur Twitter
                3 août 2006 à 10:48:31

                Citation : jesaistout

                Toc Toc Toc !
                Ya quelqu'en?
                Please repondez cé pas gentil


                Pour commencer, tu lis la définition des fonctions. Ensuite, tu traduis la définition en algorithme. Enfin, tu traduis l'algorithme en code.

                C'est aussi simple que ça, surtout quand on s'appelle "jesaistout"...
                • Partager sur Facebook
                • Partager sur Twitter
                Music only !
                  3 août 2006 à 10:54:03

                  ^^
                  Pardon mais quand tu dis algorithme, tu parle de pseudo-code ??
                  • Partager sur Facebook
                  • Partager sur Twitter
                    3 août 2006 à 10:57:31

                    Citation : Honor

                    ^^
                    Pardon mais quand tu dis algorithme, tu parle de pseudo-code ??


                    Pas tout à fait. Algorithme, c'est la traduction en texte :

                    Citation : Pas de titre

                    "Si il fait mois de 13 °C, j'allume le radiateur"


                    pseudo-code, c'est l'étape suivate

                    IF t < 13
                       radiateur (ON)
                    ENDIF
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Music only !
                      3 août 2006 à 10:59:15

                      http://fr.wikipedia.org/wiki/Pseudo-code
                      http://fr.wikipedia.org/wiki/Algorythmes
                      Si je comprend bien le pseudo-code est plus proche du code que de l'algorithme

                      edit: un peu grillé la
                      • Partager sur Facebook
                      • Partager sur Twitter
                        7 août 2006 à 21:27:20

                        Merci a touse

                        c'etait plus simple que je le croyais ...
                        Je crois que je vais changer mon pseudo a JeNeSaisRien peut etre...
                        • Partager sur Facebook
                        • Partager sur Twitter

                        fonctions de string.h

                        × 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