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 :

que fait cette fonction(5 lignes)


Sujet :

C

  1. #1
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Avril 2010
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2010
    Messages : 115
    Points : 70
    Points
    70
    Par défaut que fait cette fonction(5 lignes)
    Bonjour,

    Je suis entrain de lire le code d'un collègue mais je comprend pas ce que fait cette fonction:
    on suppose *x ='a' *y ='b'

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    char * myster ( char* x , char* y){
    char* z= x;
    while ( *z != 0 && *z!=*y){
    z++;
    if(*z)  return z;
    else return NULL;
    }
    Interprétation que je propose:
    En entrée on a deux pointeurs sur caractère, on définit une variable local à la fonction z étant aussi pointeur sur caractère.
    tanque *z! = 0 ( 0 correspond en asci a null /* j'ai pas compris ça: c'est quoi le caractère null déjà null est une chaine de caractère*/

    et (*z!=*y ) donc pour s'arrêter il faut avoir ou bien *z = b ou bien *z=null!!

    juste ici quand on incrémente z au début il s'incrémente de 1 (sizeof(char)) mais après s'il pointe vers un double par exemple ???? il s'incrémentera de 8 ???
    j'ai essayé en compilant... mais je vois pas l'idée

    Je suis vraiment coincé, merci pour toute réponse

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2006
    Messages : 107
    Points : 124
    Points
    124
    Par défaut
    Bonjour,

    x et y sont deux chaines de caractères. La fonction recherche dans la chaine x si le premier caractère de la chaine y est présent :

    Exemple :
    x="abcdef" y="essai" => la fonction retourne un pointeur sur le caractère 'e' de la chaine x,.
    x="abcdef" y="test" => la fonction retourne NULL car 't' n'est pas dans la chaîne x.

  3. #3
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Avril 2010
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2010
    Messages : 115
    Points : 70
    Points
    70
    Par défaut
    merci beaucoup apesle, j'ai compris ce que fait cette fonction

  4. #4
    Expert éminent sénior
    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
    Points : 13 926
    Points
    13 926
    Par défaut
    tanque *z! = 0 ( 0 correspond en asci a null /* j'ai pas compris ça: c'est quoi le caractère null déjà null est une chaine de caractère*/
    En C, une chaine de caractères est un tableau de char. La fin de la chaine de caractères est repérée par la présence de la valeur 0 (ou '\0' , c'est pareil). La chaine ne peut donc avoir un char égal à 0, cette valeur sentinelle marquant la fin de chaine.
    Exemples :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    char tab[] = {'a','b',0,'c','d','e'};
    // tab contient la chaine de caractères  : "ab".
    char tab[] = {0};
    // tab contient la chaine de caractères vide : ""
    char tab[] = "abc";
    // le tableau tab contient {'a','b','c',0}
    juste ici quand on incrémente z au début il s'incrémente de 1 (sizeof(char)) mais après s'il pointe vers un double par exemple ???? il s'incrémentera de 8 ???
    Non, il n'y a pas d'interprétation des caractères contenus dans la chaine, seul le caractère '\0' a un rôle spécial.
    Puisque z est un char *, z++ incrémentera toujours z pour le placer sur le char suivant. Si z était un int*, z++ incrémenterait toujours z pour le placer sur le int suivant.
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  5. #5
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Avril 2010
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2010
    Messages : 115
    Points : 70
    Points
    70
    Par défaut
    merci diogene, j'ai compris comment fonctionnent les chaines de caractere

    problème résolu

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 9
    Dernier message: 18/06/2009, 19h31
  2. Que fait cette fonction ?
    Par Invité(e) dans le forum C++Builder
    Réponses: 5
    Dernier message: 05/05/2008, 20h40
  3. que fait cette fonction ?
    Par nitteo dans le forum C#
    Réponses: 21
    Dernier message: 31/01/2008, 17h30
  4. Que fait cette fonction ?
    Par masterix59 dans le forum Débuter
    Réponses: 2
    Dernier message: 16/11/2007, 21h13
  5. que fait cette fonction ?
    Par salseropom dans le forum C
    Réponses: 21
    Dernier message: 12/10/2006, 18h33

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