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 :

extraction d'une chaine à partir d'une autre


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2010
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 38
    Par défaut extraction d'une chaine à partir d'une autre
    bonjour.
    je veux savoir comment extraire une chaine char * à partir d'une autre. par exemple, comment extraire le premier mot d'une chaine?
    j'ai essayé cela mais ça n'a pas marché:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    char* texte;// chaine source,supposé remplie
    char* mot;//premier mot à extraire
    int i=0;
    while(texte[i]!=' ' && texte[i]!='\0')
    {mot[i]=texte[i];i++;};
    mot[i+1]='\n';
    lorsque j'affiche mot, le compilateur m'affiche des symboles etranges!!
    Quelqu'un peut me dire comment regler le probleme?? merci.

  2. #2
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    lorsque j'affiche mot, le compilateur m'affiche des symboles etranges!!
    la chaine mot n'est pas terminée correctement : elle doit être terminée en mettant à la fin le caractère '\0', pas '\n'.
    Par ailleurs et bien plus grave, mot est un pointeur là où il faut un tableau de char. Un pointeur stocke une adresse, pas une chaine de caractères. Pour stocker une chaine, il faut un tableau de char.

  3. #3
    Membre averti
    Inscrit en
    Juin 2010
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 38
    Par défaut
    en effet j'ai essayé d'utiliser strtok, mais cette fonction n'a rien affiché, est ce que vous pouvez me dire le suntaxe de strtok? merci infiniment.

  4. #4
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Je n'ai pas parlé de strtok() ! De toute façon, ce n'est pas une fonction qui affiche quelque chose.

    est ce que vous pouvez me dire le suntaxe de strtok
    Voir la documentation

  5. #5
    Membre éclairé

    Profil pro
    Inscrit en
    Avril 2010
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 356
    Par défaut
    Tout d'abord, il me semble qu'il y a un gros problème au niveau de l'allocation de l'espace mémoire :
    quand tu écrits char*mots. tu déclare un pointeur vers une zone mémoire non allouée.
    Ce qu'il faudrait faire c'est soit écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    char* mot=(char*)malloc((nb_lettres+1)*sizeof(char)); 
    /*Si tu connais le nombre de lettre (sinon tu alloue plus grand que la taille de ton mot).
    ou*/
    char mot[nb_lettres+1];//Pareil pour la taille du tableau.
    Si ce n'est pas un mot mais une suite de lettres délimités par des espaces et que la taille peut être comprise entre 1 et 10 000, utilise l'allocation dynamique.

    A la fin, il te faut écrite non pas mots[i+1]='\n'; mais mots[i+1]='\0';

  6. #6
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par diogene Voir le message
    Par ailleurs et bien plus grave, mot est un pointeur là où il faut un tableau de char. Un pointeur stocke une adresse, pas une chaine de caractères. Pour stocker une chaine, il faut un tableau de char.
    Ou faire un malloc sur le pointeur non ?

  7. #7
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Citation Envoyé par Bktero Voir le message
    Ou faire un malloc sur le pointeur non ?
    Ce qui est une méthode pour obtenir un tableau.

  8. #8
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Ah d'accord ! Je pensais qu'on appelait "tableau" uniquement ce qui était déclaré de manière statique (int tableau[42]).

    Merci bien

Discussions similaires

  1. [Toutes versions] Besoin d'un code pour vérifier l'existence d'une chaine à partir d'une colonne dans une autre
    Par Chedy Smida dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 20/02/2015, 17h05
  2. [Batch] Créer une chaine à partir d'une variable et d'une autre chaine
    Par mlle lain dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 10/11/2009, 16h26
  3. Extraction d'une sous-chaine à partir d'une chaine principale
    Par gazere dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 13/06/2007, 04h08
  4. Extraction d'une chaine à partir d'une photo
    Par Julaie95 dans le forum Traitement d'images
    Réponses: 31
    Dernier message: 23/05/2006, 15h44
  5. Réponses: 7
    Dernier message: 15/11/2005, 10h14

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