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++Builder Discussion :

Comparer une chaîne lettre par lettre


Sujet :

C++Builder

  1. #1
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Par défaut Comparer une chaîne lettre par lettre
    Bonjour,

    La question que je vais posé a surement déjà était posée mais je ne parviens pas à retrouver le post de la discussion

    J'ai un Edit et je voudrais faire un genre de split avec comme séparateur l'espace.

    En gros, je voudrais faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    AnsiString Mot;
    Mot="";
    for (int i=0;i<Edit1->Text.Length()-1;i++)
    {
      if (Edit1[i+1] != " ")
      {
        Mot = Mot + Edit[i+1];
      }
      else
      {
        ShowMessage(Mot);
        Mot="";
      }
    }
    Ce code c'est juste pour vous montrer le principe ...

    Merci de votre aide
    Désolé pour cette question posée je ne sais combien de fois ..

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    Sans doute avec AnsiString::Pos.

    A plus !

  3. #3
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Par défaut
    Merci henderson,

    Je n'y avais pas pensé ...
    Je pensé qu'on pouvait faire autrement

    Je laisse ouvert le post afin de voir si d'autres personnes propose une solution différente ...

    Merci

  4. #4
    Expert confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 660
    Par défaut
    J'ai été confronté à ça jeudi... de mémoire voilà ce que j'ai fait :
    Code c++ : 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
     
    AnsiString texte, mot;
     
    int p;
     
    texte = Edit1->Text;
     
    if (texte.isEmpty())
       return;
     
    do
    {
      p = texte.Pos(" ");
      if (p<=0)
         p = texte.Length()+1;
      mot = texte.substring(1, p-1);
     
      ShowMessage(mot);
     
      if (texte.length()-p>0)
      {
         texte = texte.substring(p+1, texte.length()-p);
      }
      else
      {
          texte = "";
      }
    }
    while (!texte.isEmpty());

    J'ai sans doute fait une ou deux erreurs de frappe...

  5. #5
    Expert confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 660
    Par défaut
    tu peux complèter le code en utilisant la fonction Trim() qui supprime les espaces avant et après ta chaine

  6. #6
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    Peut-être aussi avec StringReplace (avec rfReplaceAll) en essayant de remplacer l'espace (" ") avec rien ("").
    Si ça va dans ce sens la...

    A plus !

  7. #7
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Par défaut
    Merci pour vos réponses,

    Disons que j'ai une chaine de caractères représentant une série de nombres espacés par des espaces et j'aimerai stocké ces nombre dans un tableau.

    Donc au début, j'aurai lu la chaine et à chaque position de l'espace, je stock mon numéro (convertir en int) dans mon tableau.

    Après, on peut voir aussi avec un StringList et StringReplace en mettant à chaque espace un \n de façon a avoir mes "items" ...

    La plus simple serait la dernière solution, et surement la plus rapide non ?

    Merci

  8. #8
    Expert confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 660
    Par défaut
    Regarde avec la classe TStrings :
    http://ddeflin.free.fr/builder/tstrings.htm

    Il y a la propriété CommaText qui peut sans doute t'intéresser

  9. #9
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    A oui... pas seulement modifier les séparateurs mais aussi extraire les expressions...
    A première vue, j'aurais fait comme suit :

    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
     
    AnsiString chaine == "";
    AnsiString nombres = Edit1->Text;
    AnsiString s;
    AnsiString sep = "\n";
    int n;
     
    while (nombres != "")
    {
    n = nombres.Pos(" ");
    if(n == 0)
        {
        s = nombres;
        nombres = "";
        sep = "";
        }
    else
        {
        s = nombres.SubString(0, n-1);
        nombres = nombres.SubString(n+1, nombres->Length());
        }
    // = s.ToInt(); // en espérant que...
    Chaine = Chaine + s + sep;
    }
    En creusant d'avantage parce que rien ne dit que les expressions (mots) extraites soient conformes à des nombres sous une forme littérale. (filtre lors de la saisie sans doute)

    A plus !

  10. #10
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Par défaut
    Rebonsoir,

    Ta méthode Henderson marche parfaitement J'ai juste corrigé quelques erreurs de syntaxe ...

    Je mets le code final, si ca peut en aider certains :

    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
    AnsiString chaine = "";
    AnsiString nombres = Edit1->Text;
    AnsiString s;
    AnsiString sep = "\n";
    int n;
     
    while (nombres != "")
    {
    n = nombres.Pos(" ");
    if(n == 0)
        {
        s = nombres;
        nombres = "";
        sep = "";
        }
    else
        {
        s = nombres.SubString(0, n-1);
        nombres = nombres.SubString(n+1, nombres.Length());
        }
    ShowMessage(IntToStr(s.ToInt())); // Affichage du nombre extrait
    chaine = chaine + s + sep;
    }
    ShowMessage(chaine); // affichage global
    Citation Envoyé par Henderson
    En creusant d'avantage parce que rien ne dit que les expressions (mots) extraites soient conformes à des nombres sous une forme littérale. (filtre lors de la saisie sans doute)
    Oui oui, c'est contrôlé à la saisie
    Merci pour votre aide

    A plus

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 17/07/2008, 20h31
  2. Afficher un texte lettre par lettre
    Par koKoTis dans le forum Flash
    Réponses: 2
    Dernier message: 11/12/2007, 21h14
  3. Réponses: 6
    Dernier message: 23/01/2007, 17h20
  4. Vérifier qu'une chaîne commence par
    Par BenoitDenis dans le forum Langage
    Réponses: 5
    Dernier message: 02/05/2006, 12h00

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