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 :

[debut]une fct qui remplace une chaine de char par une autre


Sujet :

C++

  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2003
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 8
    Points : 7
    Points
    7
    Par défaut [debut]une fct qui remplace une chaine de char par une autre
    bonjour,
    Je cherche une fct qui pourrait dans une chaine de caractere me remplacer toutes les iterations d'un caractere que je lui defini par un chaine que je lui defini aussi.

    Exemple si on remplace tout les \ par des \\ :
    \\reseau\machine ----> \\\\reseau\\machine.

    merci d'avance.

  2. #2
    Futur Membre du Club
    Inscrit en
    Février 2004
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 18
    Points : 8
    Points
    8
    Par défaut
    salut essai ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    j=0;
    for(i=0;i<longueur;i++)
    {
      if(chaine[i]='\')
      {
         newchaine[i+j]='\';
         j=j+1;
         newchaine[i+j]='\';
      }
      else
         newxchaine[i+j]=chaine[i];
    }
    je ne l'ai pas essayé, mais cela ne me parait pas trop mal...

  3. #3
    c@c
    c@c est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    39
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 39
    Points : 45
    Points
    45
    Par défaut
    Si tu utilises les std::strings (non, je n'enlèverai pas le "std::" ) :
    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
    56
    57
    #include <string>
    #include <iostream>
    using namespace std;
     
    /* Cette fonction remplace dans une chaîne de caractères, toutes les occurrences d'une expression par une autre */
    string str_replace(string to_replace, string replace_by, string replace_in)
    {
    	int i_pos;
    	string text_left;
    	string text_right;
    	string str_result="";
     
    	/*
    	Tant qu'il reste des occurrences du texte à remplacer dans la chaîne, on :
    	. récupère le texte avant la première occurrence
    	. récupère le texte après la première occurrence
    	. crée la nouvelle chaîne en concaténant le "texte d'avant", le texte de remplacement et le "texte d'après"
    	. recommence avec la nouvelle chaîne
    	*/
    	i_pos = replace_in.find(to_replace);	// Position de la premiere occurrence du texte à remplacer, dans la chaine
    	if(i_pos == -1 || i_pos == string::npos)
    	{
    		str_result = replace_in;
    	}
    	else
    	{
    		while(i_pos != -1 && i_pos != string::npos)
    		{
    			text_left = replace_in.substr(0, i_pos);
    			text_right = replace_in.substr((i_pos + to_replace.size()), (replace_in.size() - (i_pos + to_replace.size())));
    			replace_in = text_right;
    			i_pos = replace_in.find(to_replace);
    			str_result = str_result + text_left + replace_by;
    		}
    		str_result += text_right;
    	}
    	return str_result;
    }
     
    /* Cette fonction remplace, dans une chaîne de caractères, toutes les occurrences d'un caractère par un autre */
    string str_replace(char to_replace, char replace_by, string replace_in)
    {
    	int i_pos;
    	i_pos = replace_in.find(to_replace);	// Position de la premiere occurrence du texte à remplacer, dans la chaine
     
    	/*
    	Tant qu'il reste des occurrences du caractère à remplacer dans la chaîne, on :
    	. remplace la première occurrence du caractère, dans la chaîne
    	. recommence avec la nouvelle chaîne
    	*/
    	while(i_pos != -1)
    	{
    		replace_in[i_pos]=replace_by;
    		i_pos = replace_in.find(to_replace);
    	}
    	return replace_in;
    }
    (je sais pas ce que ça vaut, y a sans doute beaucoup plus simple )

  4. #4
    Futur Membre du Club
    Inscrit en
    Juin 2003
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    Merci pour vos reponse voila la boucle qui marche correctement avec des strings.

    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
     
     
    int j=0;
    char test[2]="////";
     
    for(int i=1;i<=chaine.Length();i++)
    {
           if(chaine[i]==test[0])
           {
                  chaine_BDD.Insert(test,i+j);
                  j++;
           }
           else
                  chaine_BDD.Insert(chaine.c_str()[i-1],i+j);
    }
    merci pour votre aide!!!

  5. #5
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 279
    Points : 11 015
    Points
    11 015
    Par défaut
    Cela se fait très proprement avec des expressions régulières. Par contre, cela requiert des bibliothèques externes et c'est limite une enclume avec les chaines exactes.

    Autrement, pour ce qui est des noms de fichiers, cf. le point 15.10 de la FAQ C++ lite.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 01/12/2009, 07h58
  2. [XL-97] remplacement de chaine de caractères par une autre
    Par Oh!Tofocus dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 15/10/2009, 00h58
  3. Réponses: 18
    Dernier message: 10/08/2009, 10h14
  4. Pb sur une fct qui marche sous mozilla mais pas ie
    Par chpog dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 21/09/2005, 11h26
  5. Fonction qui transforme chaine de caractère par une autre?
    Par geoffreykill dans le forum PostgreSQL
    Réponses: 7
    Dernier message: 09/12/2004, 14h31

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