Partage
  • Partager sur Facebook
  • Partager sur Twitter

1er exercices chaines de caractere

.... je me tire les cheveux!!!!!!!!!!!!!!

Sujet résolu
Anonyme
    11 avril 2006 à 15:29:48

    bonjour,

    la franchement je desespere :o
    j'ai compris les pointeurs et tout et tout ^^
    mais la l'exercices de mateo:

    "Voici ce que je vous propose de faire : nous avons étudié sur la fin de ce chapitre un petit nombre de fonctions issues de la librairie string.h. Vous êtes parfaitement capables de les écrire vous-mêmes. Faites-le. "

    ouai bon ben je bute a la premiere (fin la 2eme car la 1er est deja faite par mateo)

    c'est celle ci:
    -Copier une chaine dans une autre

    char* strcpy(char* copieDeLaChaine, const char* chaineACopier);


    par rapport a ca moi j'ai fait 2 choses mais 2 choses qui ne marche pas :'(:'(:'(

    lors de la compilation ==> aucun soucis mais quand je lance le prog ca m'affiche ca:

    'C:\Documents' n'est pas reconnu en tant que commande interne ou externe, un programme exécutable ou un fichier de commandes.

    Press ENTER to continue.


    dsl si il y a des fautes d'ortho. mais la cet ex. me stress
    merci d'avance,
    chicour-59

    PS:
    ceux qui voudrait mon code le voici: (seulement de la fonction)
    je sais que j'ai pas bon mais je vois pas comment faire et sa me rend dingue :'(

    char *copieChaine(char *copieDeLaChaine, const char *chaineACopier)
    {
        long longueurChaineACopier = longueuChaine(chaineACopier), i=0;
        longueurChaineACopier += 2;

        for ( i=0 ; i<longueurChaineACopier ; i++)
        {
            copieDeLaChaine[i] = chaineACopier[i];
        }

    }

    oui je sais vous allez me dire (ta rien compris au pointeur, nul va :p mais pourtant j'ai bien compris [j'ai même relu cette partie pour etre sur])
    • Partager sur Facebook
    • Partager sur Twitter
      11 avril 2006 à 16:26:29

      Ca me semble bon mais :

      - longueuChaine => longueurChaine ?
      - ta fonction doit retourner char*, or elle ne fait aucun return c'est normal ? A la rigueur transforme ta fonction en void et il n'y aura pas de problèmes si tu fais pas de return.
      • Partager sur Facebook
      • Partager sur Twitter

      If you'd like to join us, read "How do we work at OpenClassrooms"! :)

      Anonyme
        11 avril 2006 à 16:42:55

        ok merci ;)
        je l'ai fait mais pareil je compile ==> c'est ok

        apres quand j'appuis sur le bouton run de Code:Block
        il m'affiche cette fenetre

        "it seems that this project has not been build yet.
        Do you want to build it now?

        yes / no / cancel"

        ce que je traduit par:
        " il semble que ce projet n'a pas encore été compilé.
        Voulez vous le complier maintenant

        oui / non / anuler"

        alors que je viens de le compiler :o
        alors je fait "yes" il le compile mais ne lance rien :o

        alors je re-apuis sur run mais cette fois ci je dit "no"
        alors il m'ouvre la console avec le message qu'il y a dans le 1er post ;)
        • Partager sur Facebook
        • Partager sur Twitter
          11 avril 2006 à 16:43:08

          Citation : chicour-59

          lors de la compilation ==> aucun soucis mais quand je lance le prog ca m'affiche ca:

          'C:\Documents' n'est pas reconnu en tant que commande interne ou externe, un programme exécutable ou un fichier de commandes.

          Press ENTER to continue.



          Le projet doit être enregistré dans un répertoire qui n'a pas d'espaces dans son nom complet.

          /Mes documents

          ca ne va pas.

          Essaye

          /mes_docs
          • Partager sur Facebook
          • Partager sur Twitter
          Music only !
          Anonyme
            11 avril 2006 à 16:50:36

            a je viens de trouver le probleme la c'est bon ;)

            l'erreur etait que au lieu de :
            longueur = longueurChaine(chaine);


            j'avais:
            longueur = longueuChaine(chaine);


            ;)

            mais maintenant le programme a une erreur

            prog.exe a rencontre un probleme... et tout le charabia abituel donc je vous post tout mon code :p

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

            int main(int argc, char *argv[])
            {
                char chaine[] = "Salut", copie[100] = {0};
                long longueur = 0;

                longueur = longueurChaine(chaine);

                printf("La chaine %s fait %ld caracteres de long", chaine, longueur);
                printf("Je copie la chaine appellee \"chaine\" dans une chaine \"copie\"\nVoici la chaine \"chaine\" : %s\nVoici la chaine \"copie\" : %s", chaine, copieChaine(&copie, &chaine));
                return 0;
            }



            string.c
            #include "string.h"

            long longueurChaine(const char* chaine)
            {
                long nombreDeCaracteres = 0;
                char caractereActuel = 0;

                do
                {
                    caractereActuel = chaine[nombreDeCaracteres];
                    nombreDeCaracteres++;
                }
                while(caractereActuel != '\0'); // On boucle tant qu'on n'est pas arrivé à l'\0

                nombreDeCaracteres--; // On retire 1 caractère de long pour ne pas compter l'\0

                return nombreDeCaracteres;
            }

            void copieChaine(char *copieDeLaChaine, const char *chaineACopier)
            {
                long longueurChaineACopier = longueurChaine(chaineACopier), i=0;
                longueurChaineACopier += 2;

                for ( i=0 ; i<longueurChaineACopier ; i++)
                {
                    copieDeLaChaine[i] = chaineACopier[i];
                }

            }


            et le string.h avec les prepocesseurs ;)
            • Partager sur Facebook
            • Partager sur Twitter
              11 avril 2006 à 17:03:50

              matheo venait de te le dire mais bon
              • Partager sur Facebook
              • Partager sur Twitter
                11 avril 2006 à 17:09:53

                Citation : chicour-59



                long longueurChaine(const char* chaine)
                {
                    long nombreDeCaracteres = 0;
                    char caractereActuel = 0;

                    do
                    {
                        caractereActuel = chaine[nombreDeCaracteres];
                        nombreDeCaracteres++;
                    }
                    while(caractereActuel != '\0'); // On boucle tant qu'on n'est pas arrivé à l'\0

                    nombreDeCaracteres--; // On retire 1 caractère de long pour ne pas compter l'\0

                    return nombreDeCaracteres;
                }



                Ce genre de bidouille est révélatrice d'une erreur de conception (algorithme). Tout simplement par ce qu'on a codé la séquence suivante :

                mettre le compteur à 0
                FAIRE
                 lire le caractère
                 incrémenter le compteur
                TANT QUE le caractère n'est pas 0
                 

                Evidemment, on a un coup de trop... alors on corrige en quittant en décrémentant le compteur. Bidouille...

                2 corrections évidentes possibles :

                mettre le compteur à -1
                FAIRE
                 lire le caractère
                 incrémenter le compteur
                TANT QUE le caractère n'est pas 0
                 

                C'est un peu bidouille, mais ce n'est pas trop mal.


                mettre le compteur à 0
                FAIRE
                 lire le caractère
                 SI il ne vaut pas 0
                    incrémenter le compteur
                 FIN SI
                TANT QUE le caractère n'est pas 0
                 

                C'est un peu usine à gaz, mais ça donne une idée. Et si on combinait la lecture et le test à priori ?

                La solution est


                mettre le compteur à 0
                TANT QUE la valeur lue n'est pas 0
                    incrémenter le compteur
                FIN TANT QUE
                 

                Ce qui se code

                long longueurChaine(const char* chaine)
                {
                    long nombreDeCaracteres = 0;
                    char caractereActuel = 0;

                    while ((caractereActuel = chaine[nombreDeCaracteres]) != 0)
                    {
                        nombreDeCaracteres++;
                    }
                 
                    return nombreDeCaracteres;
                }
                • Partager sur Facebook
                • Partager sur Twitter
                Music only !
                Anonyme
                  11 avril 2006 à 17:20:51

                  Citation : Mite-Moisie

                  matheo venait de te le dire mais bon



                  a oui c'ets vrai o_O j'ai sauter sa 1ere phrase o_O
                  heum ben dsl ^^

                  -ed- j'ai fait ce que tu as dit j'ai toujour une erreur (il m'affiche le nombre de caractere puis l'erreur (comme au debut))

                  EDIT: Si personne ne trouve le bug de mon programme pourait t - on au moins me donner une autre reponse .

                  RE-EDIT:

                  voila j'ai enfin trouver ma soluc

                  voila mes changements:

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

                  int main(int argc, char *argv[])
                  {
                      char chaine[] = "Salut", copie[100] = {0};
                      long longueur = 0;

                      longueur = longueurChaine(chaine);

                      printf("La chaine %s fait %ld caracteres de long", chaine, longueur);
                      copieChaine(copie, chaine);
                      printf("Je copie la chaine appellee chaine dans une chaine copie\nVoici la chaine chaine : %s\nVoici la chaine copie : %s", chaine, copie);
                      return 0;
                  }



                  string.c
                  #include "string.h"

                  long longueurChaine(const char* chaine)
                  {
                      long nombreDeCaracteres = 0;
                      char caractereActuel = 0;

                      while ((caractereActuel = chaine[nombreDeCaracteres]) != 0)
                      {
                          nombreDeCaracteres++;
                      }

                      return nombreDeCaracteres;
                  }

                  void copieChaine(char copieDeLaChaine[], const char chaineACopier[])
                  {
                      long longueurChaineACopier = longueurChaine(chaineACopier);
                      longueurChaineACopier +=2;
                      long i=0;

                      for ( i=0 ; i<longueurChaineACopier ; i++)
                      {
                          copieDeLaChaine[i] = chaineACopier[i];
                      }

                  }


                  et string.h avec les préprocesseurs :p

                  merci a mateo21 pour son coups d'oeil util et a -ed- ;)
                  • Partager sur Facebook
                  • Partager sur Twitter

                  1er exercices chaines de caractere

                  × 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