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 :

Manipuler une string


Sujet :

C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    428
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 428
    Points : 60
    Points
    60
    Par défaut Manipuler une string
    Bonjour;

    Je cherche une fonction C qui permet de récuperer une sous chaine.

    Exemple : char String1 = "1C FREQUENCE A Aller SANS signature"

    Mon but étant de récupérer une nouvelle chaine sans les deux car "1C" soit une string : char String2 = "FREQUENCE A Aller SANS signature"

    Tout en sachant que je ne connais pas la taille de la chaine ni les 2 premiers car, mon but c'est de supprimer les 2 premiers car sans connaitre la taille de la suite de la chaine.

    Merci

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 115
    Points : 104
    Points
    104
    Par défaut
    Bonjour,

    Si j'ai bien compris il suffit de retirer les deux premiers caracteres, voire les 3 si l'on compte l'espace.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    #define OFFSET 2
    char *str2;
    str2 = malloc(strlen(str1 - OFFSET));
    if (str2)
            strcpy(str2, str1 + offset);

  3. #3
    Membre éprouvé Avatar de orfix
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 707
    Points : 1 132
    Points
    1 132
    Par défaut
    Citation Envoyé par Odulo Voir le message
    Bonjour,

    Si j'ai bien compris il suffit de retirer les deux premiers caracteres, voire les 3 si l'on compte l'espace.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    #define OFFSET 2
    char *str2;
    str2 = malloc(strlen(str1 - OFFSET));
    if (str2)
            strcpy(str2, str1 + offset);
    Tu as oublié d'allouer de l'espace pour le '\0'.
    To start press any key. (reading screen) Where's the "any" key? I see Esc, Catarl, and Pig Up. There doesn't seem to be any "any" key. Wo! All this computer hacking is making me thirsty. I think I'll order a Tab. (presses TAB key). -- HOMER --

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Points : 1 750
    Points
    1 750
    Par défaut
    Si ta sous-chaîne apparait au maximum qu'une fois dans une chaîne et si elle ne se situe pas forcément au début, tu peux faire comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
        char chaine1[256] = "1C FREQUENCE A Aller SANS signature";
        char sous_chaine[] = "1C ";
        char chaine2[256];
        char *pos_sous_chaine;
     
        pos_sous_chaine = strstr(chaine1,sous_chaine);
        if (pos_sous_chaine == NULL)
            strncpy(chaine2,chaine1,strlen(chaine1)+1);
        else
        {
            strncpy(chaine2,chaine1,pos_sous_chaine-chaine1);
            chaine2[pos_sous_chaine-chaine1]=0;
            strcat(chaine2,chaine1+(pos_sous_chaine-chaine1)+strlen(sous_chaine));
        }
    ~~~~

    @ Odulo :

    Attention aux parenthèses.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    str2 = malloc(strlen(str1 - OFFSET));
    Ce serait plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    str2 = malloc(strlen(str1) - OFFSET + 1); /* Ne pas oublier +1 pour le \0 final */

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 115
    Points : 104
    Points
    104
    Par défaut
    oui effectivement j'ai mal place une parenthese et oublie le \0.

Discussions similaires

  1. [XL-2010] "Out of memory" à la fin d'une routine manipulant des "string" importants
    Par langeard dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 21/05/2015, 10h20
  2. Réponses: 6
    Dernier message: 05/09/2007, 17h40
  3. Conseil sur la manipulation d'une string?
    Par Jayceblaster dans le forum Delphi
    Réponses: 6
    Dernier message: 13/07/2006, 14h29
  4. fonction manipulant une string
    Par salseropom dans le forum C
    Réponses: 16
    Dernier message: 21/02/2006, 13h18
  5. [XSLT] Manipulation d'une String
    Par Eskarina43 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 15/06/2004, 11h52

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