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 :

reconnaitre une chaine de caracteres


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 43
    Par défaut reconnaitre une chaine de caracteres
    Salut à tous,
    Voila : dans un de mes programmes, j'ai une chaine de caractères, et je veux savoir s'il s'agit d'un hostname (string normal) ou d'une adresse IP (de la forme xxx.xxx.xxx.xxx). Quelle est la méthode la plus simple pour parser cette chaine, sachant que s'il s'agit d'une adresse IP, je doit mettre chacun des octets dans une variable de type Octet (equivalent à un int).
    Au debut, je pensais faire : s'il y a un point dans la chaine, alors c'est une adresse IP, mais cela pose problème s'il y a un point dans le hostname...

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Par défaut
    Pour parser une adresse IP c'est assez simple :
    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
    std::string str("192.168.1.1");
    std::istringstream parser(str);
    int i1, i2, i3, i4;
    char c1, c2, c3;
    if ((parser >> i1 >> c1 >> i2 >> c2 >> i3 >> c3 >> i4)
        && parser.peek() == EOF // plus de caractère ?
        && 0 <= i1 && i1 <= 255
        && 0 <= i2 && i2 <= 255
        && 0 <= i3 && i3 <= 255
        && 0 <= i4 && i4 <= 255
        && c1 == '.'
        && c2 == '.'
        && c3 == '.')
    {
        // c'est une adresse IP
    }
    else
    {
        // c'est autre chose
    }

  3. #3
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Les expressions régulières.
    Sinon tu peux extraire à la main avec un flux, et si tu n'arrives pas à extraire tes 4 entiers séparés par des points alors ce n'est pas une adresse IP valide.

  4. #4
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 43
    Par défaut
    merci pour vos reponses rapides.
    Laurent, qd tu parles des expressions régulières, c'est la méthode qu'explique Sylvain ?
    Aussi, dans la méthode de Sylvain, est on obligé de passer par un flux istringstream, ou alors on peut directement parser la string ? Quelle est la difference en gros entre la string elle meme, et le flux associé ?

    Merci à vous.

  5. #5
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Laurent, qd tu parles des expressions régulières, c'est la méthode qu'explique Sylvain ?
    Aucun rapport non.
    Voilà un article concernant les expressions régulières en C :
    http://nicolasj.developpez.com/articles/regex/
    Tu as aussi des bibliothèques du genre boost.regex pour le C++. Mais si tu n'en as aucune à disposition ce n'est peut-être pas la peine de sortir l'artillerie lourde, comme te l'a montré Sylvain.

    Aussi, dans la méthode de Sylvain, est on obligé de passer par un flux istringstream, ou alors on peut directement parser la string ? Quelle est la difference en gros entre la string elle meme, et le flux associé ?
    Il n'y a que les flux qui permettent de faire les transformations chaînes <--> type quelconque (ici entiers). Tu ne peux rien faire de ce genre directement avec un std::string.

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 06/11/2007, 12h36
  2. [VBA-Excel] reconnaitre une chaine de caractere
    Par DonKnacki dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 13/06/2006, 16h15
  3. Réponses: 9
    Dernier message: 14/03/2006, 15h34
  4. Réponses: 2
    Dernier message: 30/03/2004, 11h31
  5. Controler une chaine de caracteres ou d'entiers?
    Par Le druide dans le forum C
    Réponses: 6
    Dernier message: 25/09/2003, 08h48

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