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 :

Equivalent de substring en C ??


Sujet :

C

  1. #1
    Battosaiii
    Invité(e)
    Par défaut Equivalent de substring en C ??
    Comment faire pour faire l'equivalent de substring en c. Je sais qu'avec les fichiers en entree c'est faisable avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    FILE * fin;
    len=(unsigned long)fread((char*)b3, 1, BLOCK_LEN, fin);
    En revanche faire la meme chose avec une chaine de caractere c'est plus difficile
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    char * textByte;//meme contenu que fin
    strncpy((char*)b3,textByte,BLOCK_LEN);
    De plus quand on fait 2 fread successif on lit la chaine de caractere suivante dans le fichier fin. tandis que strncpy ne fait pas la meme chose.

    2eme question : existe il un equivalent au calcul du nombre elements lu dans fin avec fread. En effet fread retourne le nombre d'element lu...

  2. #2
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut Re: Equivalent de substring en C ??
    Citation Envoyé par Battosaiii
    Comment faire pour faire l'equivalent de substring en c.
    Une utilisation asctucieuse de strncat() permet ça. Bien lire la doc.
    Pas de Wi-Fi à la maison : CPL

  3. #3
    Membre averti Avatar de SPACHFR
    Profil pro
    Paaaaaa
    Inscrit en
    Février 2004
    Messages
    557
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paaaaaa

    Informations forums :
    Inscription : Février 2004
    Messages : 557
    Points : 400
    Points
    400
    Par défaut
    Je déterre un peu (beaucoup) ce post, mais je cherchais à faire un substring.
    Suite au post d'Emmanuel j'ai fais cette fonction (basique) mais qui fonctionne .
    Si ça peux aider....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    char *substr(char *src,int pos,int len) { 
      char *dest=NULL;                        
      if (len>0) {                            
        dest = (char *) malloc(len+1);        
        strncat(dest,src+pos,len);            
      }                                       
      return dest;                            
    }
    S'il n'y a pas de solution c'est qu'il n'y a pas de problème.

  4. #4
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par SPACHFR Voir le message
    Je déterre un peu (beaucoup) ce post, mais je cherchais à faire un substring.
    Suite au post d'Emmanuel j'ai fais cette fonction (basique) mais qui fonctionne .
    Si ça peux aider....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    char *substr(char *src,int pos,int len) { 
      char *dest=NULL;                        
      if (len>0) {                            
        dest = (char *) malloc(len+1);        
        strncat(dest,src+pos,len);            
      }                                       
      return dest;                            
    }
    Bonjour,

    Attention, le premier paramètre de str[n]cat doit être une chaine terminée par '\0'.

    Pour éviter un soucis du au malloc qui ne met à pas zéro la mémoire qu'il alloue, il convient d'écrire plutôt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    char *substr(char *src,int pos,int len) { 
      char *dest=NULL;                        
      if (len>0) {                  
        /* allocation et mise à zéro */          
        dest = calloc(len+1, 1);      
        /* vérification de la réussite de l'allocation*/  
        if(NULL != dest) {
            strncat(dest,src+pos,len);            
        }
      }                                       
      return dest;                            
    }

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Et src devrait être un pointeur const, et si tu compiles en C, le cast explicite du retour de malloc() est inutile.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Membre averti Avatar de SPACHFR
    Profil pro
    Paaaaaa
    Inscrit en
    Février 2004
    Messages
    557
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paaaaaa

    Informations forums :
    Inscription : Février 2004
    Messages : 557
    Points : 400
    Points
    400
    Par défaut
    Merci pour vos précisons (appliquées).

    Je vais regarder la fonction calloc.
    S'il n'y a pas de solution c'est qu'il n'y a pas de problème.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 34
    Points : 36
    Points
    36
    Par défaut Utilisation de substr pour définir mid, left, right
    Bonjour
    Pour compléter ces remarques sur substr, j'ai mis en place ce programme qui permet de retrouver l'équivalent de mid, left et right.

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    char * substr(char *chaineSource,int pos,int len) { 
      // Retourne la sous-chaine de la chaine chaineSource 
      // depuis la position pos sur la longueur len
     
      char * dest=NULL;                        
      if (len>0) {                  
        /* allocation et mise à zéro */          
        dest = (char *)calloc(len+1, 1);      
        /* vérification de la réussite de l'allocation*/  
        if(NULL != dest) {
            strncat(dest,chaineSource+pos,len);            
        }
      }                                       
      return dest;                            
    }
     
    char * mid(char *chaineSource, int pos) {
          // Retourne la sous-chaine de chaineSource depuis 
          // la postion pos jusqu'au reste de chaineSource.
          // Si la position pos est supperieur à la longueur de chaineSource, 
          // on retourne chaineSource.
          return (pos>strlen(chaineSource))? chaineSource : substr(chaineSource, pos, strlen(chaineSource));
    }
     
    char * left(char *chaineSource, int len){
          // Retourne les len caractères de gauche de chaineSource.
          // Si la longueur len est suppérieur ou égale à la longeur de chaineSource,
          // on retourne chaineSource. Si len est 0, on retourne '\0'. 
          return (len>=strlen(chaineSource))? chaineSource : substr(chaineSource, 0, len);
    }
     
    char * right(char *chaineSource, int len){
          // Retourne les len caractères de droite de chaineSource.
          // Si la longueur len est suppérieur ou égale à la longueur de chaineSource,
          // on retourne chaineSource. Si len est 0, on retourne '\0'.
          return (len>=strlen(chaineSource))? chaineSource : substr(chaineSource, strlen(chaineSource)-len, len);
    }
     
    int main(){
      char * machaine="Il fait chaud et beau ces jours ci!";
     
      printf("%s\n", mid(machaine, 17));
      printf("%s\n", left(machaine, 13));
      printf("%s\n", right(machaine, 13));
      printf("%s\n", mid(machaine, 36));
      printf("%s\n", left(machaine, 0));
      printf("%s\n", right(machaine, 0));
      getchar();
      return 0;
    }
    @++
    Paolo

  8. #8
    Membre actif Avatar de moins1
    Homme Profil pro
    Autre
    Inscrit en
    Février 2013
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Autre
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2013
    Messages : 85
    Points : 222
    Points
    222
    Par défaut
    C'est un post déterré et redéterré ça!

    Pas besoin de calloc() pour le '\0', les fonctions de la famille str le place à la fin de la chaîne destination.

    C'est pas la cas des fonctions mem par contre.


Discussions similaires

  1. Equivalent de substring pour les integer
    Par xavier81 dans le forum Développement
    Réponses: 9
    Dernier message: 11/03/2011, 18h11
  2. Equivalent de SUBSTRING et TRUNC
    Par kklutse dans le forum Développement de jobs
    Réponses: 4
    Dernier message: 11/03/2011, 17h20
  3. Equivalent de Substr
    Par dominos dans le forum Langage
    Réponses: 3
    Dernier message: 05/07/2010, 12h01
  4. Equivalent de substring en javascript ?
    Par Battosaiii dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 19/06/2009, 19h39
  5. substring ou equivalence existe il ?
    Par CanardJM dans le forum C
    Réponses: 3
    Dernier message: 04/01/2006, 17h32

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