Partage
  • Partager sur Facebook
  • Partager sur Twitter

Chaine de caractère

la fonction strcpy

    22 décembre 2006 à 11:48:26

    J'essaye de faire l'exercice qui consiste a recréer les fonction de string?h par nous même? Et je bloque sur strcpy?
    Voila mon code :

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

    long longueurChaine(const char* chaine);
    char* copieChaine(char* copieDeLaChaine, const char* chaineACopier);

    int main(int argc, char *argv[])
    {
        char chaine[]= "Salut", copie[100]={0};
        copieChaine(copie, chaine);
        printf("chaine vaux %s\n", chaine);
        printf("copie vaux %s\n", copie);
        return 0;
     }



    char* copieChaine(char* copieDeLaChaine, const char* chaineACopier)
    {
           char charactereActuel=0, charactereCopier=0;

        do
        {
            copieDeLaChaine[charactereCopier]=chaineACopier[charactereActuel];
            charactereActuel++;

           }
            while (charactereActuel !='\0');
            printf("%s",copieDeLaChaine);
            return copieDeLaChaine;
        }


    Mais il m'affiche
    chaine vaux Salut
    copie vaux x


    Et je ne comprend pas pourquoi?

    Et il y a un second truc que je ne comprend pas, c'est comment en envoyant une constante pour copieDeLaChaine on peux recevoir quelque chose de modifier alors que a la base on a dis que c'étais une constante? Mon compilateur m'a gentillement envoyé sur les roses quand j'ai essayer?
    • Partager sur Facebook
    • Partager sur Twitter
      22 décembre 2006 à 12:24:22

      do
          {
              copieDeLaChaine[charactereCopier]=chaineACopier[charactereActuel];
              charactereActuel++;

             }


      Tu n'incrementes pas la variable charactereCopier, donc tous les caractères sont copiés un par un (en écrasant le précedent) dans copieDeLaChaine[0].
      • Partager sur Facebook
      • Partager sur Twitter
        22 décembre 2006 à 18:16:52

        Je vient de faire la modification dont tu m'as fais part.

        char* copieChaine(char* copieDeLaChaine, const char* chaineACopier)
        {
               char charactereActuel=0, charactereCopier=0;
            do
            {
                copieDeLaChaine[charactereCopier]=chaineACopier[charactereActuel];
                charactereActuel++, charactereCopier++;
               }
                while charactereActuel !='\0');
                return copieDeLaChaine;
            }


        La il m'affiche

        chaine vaux ole
        copie vaux Salut


        Je ne comprend pas c'est incohérent. Car mon tableau chaineACopier est une constante.

        Puis je réalise que je ne suis pas cohérent, pourquoi mettre deux variable que j'incrémente au meme endroit et que j'utilise en même temp. Alors je remplace charactereCopier et charactereActuel par i. Et la il tombe dans uen chaine infinis. Je ne comprend rien du tout. Help !
        • Partager sur Facebook
        • Partager sur Twitter
          22 décembre 2006 à 18:32:58

          salut je te conseil de faire une fonction void et a l'interieur une boucle for avec la variable i qui s'incremente a chaque tour permetant de copier chaine[i] dans copie[i] tien voila le code si tu n'y arrive pas :

          Secret (cliquez pour afficher)
          #include <stdio.h>
          #include <stdlib.h>
          void copieChaine(char* copieDeLaChaine, const char* chaineACopier)
          {
              int i;
              for(i = 0 ; chaineACopier[i] != '\0' ; i++)
                  copieDeLaChaine[i]=chaineACopier[i];
          }
          int main()
          {
              char chaine[] = "salut", copie[100] = "";
              copieChaine(copie, chaine);
              printf("chaine = %s\ncopie = %s\n", chaine, copie);
              return 0;
          }
          • Partager sur Facebook
          • Partager sur Twitter
            22 décembre 2006 à 18:42:09

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

            /* remram44 : size_t ici, int pour les entiers en général. Ne pas utiliser
             * long !!! */

            size_t longueurChaine(const char* chaine);
            char *copieChaine(char *copieDeLaChaine, const char *chaineACopier);

            /* remram44 : paramètres inutiles */
            int main(void)
            {
                /* remram44 : une déclaration par ligne... */
                const char *chaine = "Salut";
                char copie[100];
               
                copieChaine(copie, chaine);
               
                printf("chaine vaut %s\n", chaine);
                printf("copie vaut %s\n", copie);
               
                return 0;
            }

            char *copieChaine(char *copieDeLaChaine, const char *chaineACopier)
            {
                /* remram44 : mais pourquoi char ? */
                size_t charactere = 0;
               
                do {
                    copieDeLaChaine[charactere] = chaineACopier[charactere];
                    charactere++;
                }
                /* remram44 : cette partie était complètement fausse... */
                while(chaineACopier[charactere] !='\0');
               
                return copieDeLaChaine;
            }
            • Partager sur Facebook
            • Partager sur Twitter
              26 décembre 2006 à 11:29:37

              Je suis maintenant en train d'essayer de coder pour strpbrk

              char* rechercheCaractere(const char* chaine, const char* lettresARechercher)
              {
                  long caractereTrouver=0, i=0, j=0, k=0, test=0;
                  char suiteChaine[1000]={0};
                  do
                  {
                      do
                      {
                          if (chaine[i] == lettresARechercher[k])
                          {
                              test=1;
                              }
                          k++;
                          }
                          while (lettresARechercher[k]!='\0' || test);
                      k=0;
                      i++;
                       }
                       while (test ==1 || chaine[i] !='\0');
                      if (test)
                  {
                      do
                      {
                          suiteChaine[j]=chaine[i];
                          i++, j++;
                      }while (chaine[i]!='\0');
                      }
                  printf("%s", suiteChaine);
                  return suiteChaine;
              }


              Et ca ne fonctionne pas, car il m'incrémente k n'importe comment et il recommence la première chaine sans cesse alors que test est validé. Please help
              • Partager sur Facebook
              • Partager sur Twitter

              Chaine de caractère

              × 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