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 :

modifier une chaine


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Mars 2008
    Messages
    296
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 296
    Par défaut modifier une chaine
    Bonjour,

    Je voudrais modifier ma chaine de caractere si elle contient une etoile et qu'il ny a pas de point devant l'etoile

    ex :
    toto_*_titi
    je voudrais ajouter un point . devant l'etoile
    toto_.*_titi
    attention il peut y avoir plusieurs etoile :
    toto_*_titi* -> toto_.*_titi.*
    si il y a un point devant l'etoile rien modiffier
    toto_.*_titi -> toto_.*_titi
    merci

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Tu dois pouvoir t'en sortir avec des expressions régulières, non?

    Sinon, ca dépend comment tu représente ta chaîne, si tu modifie ta chaîne ou tu produit une nouvelle chaîne résultat, etc... Selon le cas, tu peux faire soit des recherches/remplacer, soit des recopies par token...

  3. #3
    Membre éclairé
    Inscrit en
    Mars 2008
    Messages
    296
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 296
    Par défaut
    je voudrais le resultat dans une variable
    recherche de "*",
    verifier si il y a un point sur le caractere juste avant
    si il n'y en a pas remplacer par ".*"

    merci

  4. #4
    Membre éclairé
    Inscrit en
    Mars 2008
    Messages
    296
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 296
    Par défaut
    rx contient une chaine avec peut etre des *
    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
    //jusque la fin de la variable
    while ( ??? )
    {
       //recherche  1er *
       std::string::size_type rxpos=rx.find("*");
     
      //verifier si il y a un point juste avant
      if (rx.substr(rxpos-1,rxpos) == ".")
      {
                //remplacer * par .*
    	rrx=rx.substr(rxnpos,rxpos);
     
    	rxnpos = rxpos;
      }
     
    }
    est ce que ceci vous parez correct?
    merci

  5. #5
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Sur cette idée, il faut traiter le premier token en dehors de la boucle (juste avant), ce qui te donne la condition à ton while (!=npos) et permet de traiter la chaîne débutant par '*'.
    Idem pour le dernier token.

  6. #6
    Membre Expert
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par défaut
    Il faut aussi vérifier si l'étoile n'est pas en début de chaîne, sinon...

  7. #7
    Membre éclairé
    Inscrit en
    Mars 2008
    Messages
    296
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 296
    Par défaut
    c'est quoi un token? le 1er test?

    j'ai une erreur
    'substr' : cannot convert parameter 1 from 'class std::basic_strin
    utiliser un Remplace n'est pas mieux?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rxx.Remplace ('*',".*");
    est ce que c'est mieux comme ca?
    mais jai toujours l'erreur ci dessus
    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
    std::string rxnpos = 0;
    std::string rrx;
     
    std::string::size_type rxpos=rx.find("*");
     
    	while (rx != rxpos)
    	{
    		std::string::size_type rxpos=rx.find("*");
     
    		if (rx.substr(rxpos-1,rxpos) == ".")
    		{
    			rrx = rx;
    			rrx=rx.substr(rxnpos,rxpos);
    			rxnpos = rxpos;
    		}
    	}
     
    	return rrx;
    }
    merci

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

Discussions similaires

  1. Fonction qui modifie une chaine de caractère
    Par condor_01 dans le forum Débuter
    Réponses: 7
    Dernier message: 05/11/2007, 18h32
  2. Réponses: 1
    Dernier message: 10/04/2007, 23h29
  3. [VB.NET] Modifier une chaine de connextion
    Par hemipsy dans le forum Accès aux données
    Réponses: 4
    Dernier message: 28/12/2006, 12h38
  4. Modifier une chaine de caractères lue dans une DB
    Par shinryu69 dans le forum Langage
    Réponses: 4
    Dernier message: 31/10/2006, 13h40
  5. Modifier une chaine de caractères ?
    Par Arkadius dans le forum Oracle
    Réponses: 2
    Dernier message: 13/04/2006, 16h21

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