IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Créer un sous chaine d'une chaine de caractère


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 193
    Par défaut Créer un sous chaine d'une chaine de caractère
    Bonjour à tous,

    Comme dis l'intitulé, je veux creer un programme qui permet de créer un sous chaine d'une chaine de caractère:

    Voici le programme que j'ai fait: il y a un problème à la ligne chaine ++ selon le compilateur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    char* souschaine(char*ch , int deb, int fin){
        char * s_ch=NULL;
        int i;
     
        if (ch!= NULL && deb<fin){
     
            /*Calcul de la taille de la sous chaine*/
            s_ch=malloc(sizeof(*s_ch)* (fin-deb+1)); /* par ex fin=6, deb=2,
                                                      * 6 char à recopier + 1 '\0'*/
            if (s_ch!=NULL){
     
     
                /*parcourir la chaine *ch entre les deux indice */
                for(i=deb; i<fin; i++){
     
                    /* Copier chaque caractère dans la sous chaine*/
                    s_ch[i-deb]= ch[i];
                }
     
                s_ch[deb-fin+1]='\0';
            }
     
        }else{
            fprintf("ERREUR");
            exit (EXIT_FAILURE);
        }
        return s_ch;
    }
    Pouvez vous m'aidez s'il vous plait?

    Merci et joyeux noel!!!!

  2. #2
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Juste trois points :

    • La fonction fprintf() prends en premier paramètre un FILE*. Tu voulais probablement écrire fprintf(stderr, "ERREUR"); et non fprintf("ERREUR");
    • La chaîne initiale (ch) n'étant pas modifiée dans l'opération, le paramètre ch devrait être const.
    • Sortir du programme avec un exit et balancé un message en cas de paramètres erronés dans une fonction technique comme celle-ci est un peu violent, pourquoi ne pas tout simplement retourné NULL et laissé le code appelant traiter l'erreur ?


    A part ça qu'elle est l'erreur exacte qu'affiche le compilateur ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 193
    Par défaut
    Merci pour votre réponse et vos conseils.
    Pour les points 1 et 3, je viens de laisser tomber le fprintf et le EXIT
    Pour le point 2, je n'ai pas vraiment compris ce que vous voulez dire.
    Pour le problème de compilation, j'ai réussi à le régler, avant que vous lisiez mon programme...

  4. #4
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Citation Envoyé par bsangoku Voir le message
    Pour le point 2, je n'ai pas vraiment compris ce que vous voulez dire.
    Que le prototype de ta fonction devrait être

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char* souschaine(const char*ch , int deb, int fin)
    et non

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char* souschaine(char*ch , int deb, int fin)

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 193
    Par défaut
    A ok . Mais juste maintenant que je réfléchis, est on obligé d'avoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char* souschaine(const char*ch , int deb, int fin)
    ou on peut avoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char* souschaine(const char*ch , int deb, char c)
    en ayant ce prog là?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    char* souschaine1(char*ch , int deb, char c){ 
        char * s_ch=NULL, *aux, *aux1;
        int i=0, lg=0;
        aux=ch;
     
        if(ch!=NULL){
            while(*(aux+deb)!=c){
                lg++;
            }
            aux=ch;
            s_ch=malloc (lg+1);
            aux1=s_ch;
     
            if (s_ch!=NULL){
     
                for(i=deb; i<strlen(s_ch); i++){
                    s_ch[strlen(s_ch)-deb]=ch[deb];
                }
                s_ch[strlen(s_ch)-deb+1]='\0';
            }
     
        }
        return s_ch;
    }

  6. #6
    Membre émérite
    Avatar de Pouet_forever
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 671
    Par défaut
    Dans ton programme tu as pas mal de variables inutiles.
    Tu fais un malloc sur s_ch sans l'initialiser et ensuite tu utilises strlen sur s_ch du coup c'est aléatoire
    Pour faire la recherche de ton caractère tu peux utiliser la fonction strchr.
    Tu utilises beaucoup de fois strlen(s_ch), je pense que tu peux faire une variable pour éviter d'appeler à chaque fois strlen
    Je ne vois pas trop l'intérêt de cette ligne dans ta boucle, tes variables ne changent jamais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    s_ch[strlen(s_ch)-deb]=ch[deb];

Discussions similaires

  1. recherche d'une chaine dans une chaine
    Par jpclutier dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 03/12/2007, 11h30
  2. comment supprimer une chaine d'une chaine?
    Par Philippe PONS dans le forum Framework .NET
    Réponses: 3
    Dernier message: 28/05/2007, 10h47
  3. Tester une chaine dans une chaine
    Par ulysse031 dans le forum Algorithmes et structures de données
    Réponses: 13
    Dernier message: 26/03/2007, 00h48
  4. chercher caractére d'une chaine dans une chaine
    Par ulysse031 dans le forum Langage
    Réponses: 25
    Dernier message: 21/03/2007, 18h09
  5. Réponses: 2
    Dernier message: 19/10/2005, 15h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo