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 :

récuperer un entier dans un chaine


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 récuperer un entier dans un chaine
    Bonjour;

    J'ai une chaine de caractères comme suit :

    chaine =863&parentId=863', 863, true, 'iv', 'fullscreen=yes,location=no,scrollbars=yes,menubars=no,toolbars=no,resizable=yes');; return false;" oncontextmenu='return false;'>

    je dois récuperer seulement la chaine "863" juste avant le car "&" et supprimer le reste.

    Merci

  2. #2
    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
    Salut

    Il y a deux réponses possibles à ta question :

    1) Soit il s'agit de la seule chaîne à analyser, et dans ce cas, pourquoi ne pas toi-même reprendre la chaine "863" ?

    2) Soit il ne s'agit pas de la seule chaîne à analyser et il s'agit donc d'analyser plusieurs chaînes du même style.
    Mais dans ce cas, ta question, posée tel quelle, est trop imprécise. Il nous faut connaitre le format exact de tes chaînes à analyser. Est-il pareil pour toutes ?
    Si le format est pareil pour toutes, et par conséquent s'il s'agit de récupérer le premier nombre trouvé et de le stocker dans une autre chaîne, on peut faire quelque chose du style (à adapter selon tes besoins) :
    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
    #include <stdio.h>
    #include <ctype.h>
     
    int main(void)
    {
    	char texte[]="chaine =863&parentId=863', 863, true, 'iv', 'fullscreen=yes,location=no,scrollbars=yes,menubars=no,toolbars=no,resizable=yes');; return false;\"";
    	char nombre[10];
     
    	char * ptexte = texte ;
    	char * pnombre = nombre ;
     
    	while ( *ptexte && !isdigit(*ptexte) )
    		ptexte++;
    	while ( isdigit(*ptexte) )
    	{
    		*pnombre = *ptexte ;
    		pnombre++;
    		ptexte++;
    	}
    	*pnombre = '\0' ;
     
    	printf("chaine a analyser : %s\n" , texte );
    	printf("nombre recupere : %s\n" , nombre );
     
    	return 0;
    }

  3. #3
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Disons que la chaîne soit tout simplement : "chaine =863&parentId='863'". Remarquons bien la présence d'espace avant le caractère = et son absence après. Pour lire le 863 qui suit on pourra écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    const char * s = "chaine =863&parentId='863'";
    int n;
    sscanf(s, "chaine =%d", &n);
    printf("n = %d\n", n); /* Affiche n = 863 */

  4. #4
    Membre éclairé Avatar de sloshy
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2005
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 728
    Points : 723
    Points
    723
    Par défaut
    Bonjour,
    Les réponses donnes sont bonnes mais ne répondent pas formellement a ce qui a été demandée (elles partent de principes implicite).

    Si on pars du principe que tu dois obtenir le nombre située avant un caractère défini, je propose:
    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
    int     my_search(char *str, char marqueur)
    {
      int   index   = 0;
      int   len     = 0;
      char  *nb     = NULL;
     
      while (str[index] != 0)
        {
          if (str[index] == marqueur)
            {
              --index;
              len = 0;
              while ((index != 0) && (str[index] <= '9' && str[index] >= '1'))
                {
                  --index;
                  ++len;
                }
              if ((nb = malloc(sizeof(char) * len + 1)) == NULL)
                return (-1);
              nb[len] = 0;
              strncpy(nb, &(str[index + 1]), len);
              return (atoi(nb));
            }
          ++index;
        }
      return (-1);
    }
    Je n'ai pas teste mais ca devrais être good.
    “La seule révolution possible, c'est d'essayer de s'améliorer soi-même, en espérant que les autres fassent la même démarche. Le monde ira mieux alors.”

  5. #5
    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
    Bonjour;

    Merci pour vos réponse.
    Je pense que je me suis mal exprimé mais Sloshy a raison, le but étant de récupérer la chaine avant "&" que je ne connais pas.
    Sinon je pensais à une solution avec des fonctions strstsr ou autres mais pas un traitement car par car.
    Mais bon ce n'est pas grave je vais testé la fonction proposée par Sloshy.

    En vous remerciant.

  6. #6
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    C'est toujours possible avec scanf. En reprenant le même exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    const char * s = "chaine =surprise !&parentId='863'";
    char buffer[20+1];
    sscanf(s, "chaine =%20[^&]", buffer);
    printf("%s\n", buffer); /* Affiche : surprise ! */
    %[^&] signifie lire tout jusuq'à ce que l'on rencontre un &. En inscrivant 20 entre le % et le [...], on dit qu'on ne veut lire que 20 caractères au maximum.

Discussions similaires

  1. récuperer un caractere dans une chaine
    Par amill dans le forum Langage
    Réponses: 2
    Dernier message: 17/04/2007, 17h16
  2. inserer un entier dans une chaine de caractere
    Par thonyitii dans le forum C
    Réponses: 11
    Dernier message: 02/01/2007, 22h00
  3. Premiere occurence d'un entier dans une chaine
    Par amika dans le forum Langage
    Réponses: 3
    Dernier message: 04/05/2006, 20h04
  4. Réponses: 10
    Dernier message: 10/10/2005, 20h46
  5. Récuperer un nombre dans une chaine de caractère
    Par ColonelHati dans le forum C
    Réponses: 4
    Dernier message: 27/04/2005, 14h50

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