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 :

Trouver le nbre de lettre dans une chaine


Sujet :

C++

  1. #1
    martin199
    Invité(e)
    Par défaut Trouver le nbre de lettre dans une chaine
    bonsoir à tous

    voila, j'ai 1 Edit1 ou j'ecris une phrase

    et j'ai un bouton qui execute le programme et j'ai un deuxième Edit ou normalement je recois le nombre de "e" dans cette phrase.

    Mais je n'y arrive pas et je ne sais plus quoi faire. quelqu'un aurait t'il une idée...

    voila mon code

    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
    
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    char* chaine;
    int i=0;
    int n=0,nb ;
     chaine=(char*) malloc (80);
    
    
    
     strcpy(  Edit1->Text, chaine);
    
    
     nb=strlen(chaine);
    for (i=0;i<nb;i++)
    {
    if ( chaine[i]=='e')
    	{
    	n=n+1;
    	}
    }
    
    Edit2->Text ="Le nombre de e est de"+n;
    }
    voila mes 2 erreurs:
    [C++ Erreur] Unit1.cpp(30): E2034 Impossible de convertir 'AnsiString' en 'char *'
    [C++ Erreur] Unit1.cpp(30): E2342 Mauvaise correspondance de type dans le paramètre '__dest' ('char *' désiré, 'AnsiString' obtenu)

  2. #2
    Membre averti
    Avatar de David Fleury
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 253
    Points : 307
    Points
    307
    Par défaut
    Hum, je connais pas trop les AnsiString mais strcpy, c'est au moins dans l'autre sens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    strcpy( chaine, Edit1->Text.c_str() );
    pour compter sinon il y a std::count.

    Et je serai étonné que "Le nombre ... de" + n; compile

    Sinon en 1 recherche sur google avec AnsiString
    http://c.developpez.com/faq/bcb/?pag...es#chainescstr

  3. #3
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par Hylvenir
    Et je serai étonné que "Le nombre ... de" + n; compile
    C'est simplement de l'arithmétique de pointeur. Ça compile, mais je doute que ça fasse ce qu'il veut.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  4. #4
    martin199
    Invité(e)
    Par défaut
    alors voila je l'ai modifie et nouvelle erreur, pas a la compilation mais quand j'appuie sur le bouton pour voir le resultat, il me dit qu'il ya une violation...

    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
     
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    char* chaine;
     
     //chaine=(char*) malloc (80);
     
     strcpy( chaine, Edit1->Text.c_str() );
     nb=strlen(chaine);
     
     
    for (i=0;i<nb;i++)
    {
    if ( chaine[i]=='e')
    	{
    	n=n+1;
    	}
    }
     
    Edit2->Text ="Le nombre de e est de"+n;
    }

  5. #5
    Membre averti
    Avatar de David Fleury
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 253
    Points : 307
    Points
    307
    Par défaut
    Ah oui.. décidément je perds mes réflexes...

    Bon, pour rire (sans compilateur et sans connaitre), tu peux
    essayer un truc du genre...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
        Edit2->Text = "Le nombre de e est de "
               + IntToStr( std::count( Edit1->Text.c_str(),
                                                Edit1->Text.Length(), 'e' ) );
    }

  6. #6
    martin199
    Invité(e)
    Par défaut
    le compil me dit

    [C++ Erreur] Unit1.cpp(23): E2316 'count' n'est pas un membre de 'std'

  7. #7
    Membre averti
    Avatar de David Fleury
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 253
    Points : 307
    Points
    307
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #include <algorithm>

  8. #8
    martin199
    Invité(e)
    Par défaut
    je connaissais pas cette biblio, mais j'ai une nouvelle erreur a la derniere ligne qui me dit ceci:

    [C++ Erreur] Unit1.cpp(25): E2285 Impossible de trouver une correspondance pour '_STL::count<_InputIter,_Tp,_Size>(char *,int,char)'

  9. #9
    Membre averti
    Avatar de David Fleury
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 253
    Points : 307
    Points
    307
    Par défaut
    Argh,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
        Edit2->Text = "Le nombre de e est de "
               + IntToStr( std::count( Edit1->Text.c_str(),
                                                Edit1->Text.c_str() + Edit1->Text.Length(), 'e' ) );
    }
    Après tu cherches tout seul une meilleure méthode.
    Après tout, c'est toi qui a le compilateur

  10. #10
    martin199
    Invité(e)
    Par défaut
    je'ai trouvé d'une autre facon, voila

    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
     
     
    void __fastcall TForm1::Button1Click(TObject *Sender)
     
    {       int i, n=0;
     
            AnsiString trame (Edit1->Text);
            for(i=1; i<=trame.Length(); i++)
            {
                    if (trame[i]=='e')
                               n++;
            }
            Label1->Caption="Le nombre de e = " + AnsiString ( n ) ;
     
    }
    merci encore les gars

  11. #11
    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
    En C et dérivées, les chaines sont 0 indexées. Ton code produit un résultat faux et est suceptible de planter aléatoirement. Et accessoirement la solution avec std::count sera plus rapide (car calcul de Length() hors de la boucle).

    Quant à <algorithm>, c'est un des morceaux de la bibliothèque standard du C++. Celle qui est livrée avec tous les compilateurs.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

Discussions similaires

  1. Réponses: 3
    Dernier message: 21/06/2011, 15h08
  2. Réponses: 3
    Dernier message: 18/09/2009, 12h41
  3. [RegEx] Trouver les mots en majuscule dans une chaine
    Par Boeing dans le forum Langage
    Réponses: 2
    Dernier message: 15/10/2007, 23h44
  4. position d'une lettre dans une chaine de caractaire
    Par zidenne dans le forum Delphi
    Réponses: 3
    Dernier message: 14/08/2006, 10h18
  5. Nbre de caractères dans une chaine
    Par Thepince dans le forum Access
    Réponses: 2
    Dernier message: 10/08/2006, 14h34

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