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 :

compter le nombre de mot c++


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2010
    Messages : 69
    Par défaut compter le nombre de mot c++
    bonjour, developpeur, developpeuz

    je réalise un petit prorgramme en c++ builder
    j'ai un fichier "MonFichier.txt" qui contient

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    papa z maman r t kiki grizouille top junior papa maman toto toto r t
    je souhaite compter le nombre de chaque mot

    papa---->2
    maman-->2
    toto---->2
    z------->1

    etc

    j'ai réaliser un programme qui me compte le nombre de caractère, c'est pas vraiment ce que je veux
    quelqu'un peux til m'aider ou just me donner une piste svp

    svp

  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 !

    Memo1 pour afficher ton texte (hautement philosophique) et Memo2 pour afficher le résultat.
    OpenDialog1 pour charger un fichier.

    Tu peux éventuellement essayer quelque chose dans ce genre là (c'est juste un essai !) :

    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
     
    char Buffer[1024];
    int Count[1024];
    TStringList *Mots;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
    {
    Mots = new TStringList;
    }
    //--- Déclarer le destructeur dans la classe de TForm1
    __fastcall TForm1::~TForm1()
    {
    delete Mots;
    }
    //--- Pour lancer le décompte : un bouton
    void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
    {
    int n;
    char *S;
    char *E;
    char *P;
    Mots->Clear();
    for(int j = 0; j < Memo1->Lines->Count; j++)
        {
        strcpy(Buffer, Memo1->Lines->Strings[j].c_str());
        S = Buffer;
        P = Buffer;
        E = &Buffer[ strlen(Buffer) ];
        while(S != E)
            {
            if(*S == ' ')
                {
                *S = 0;
                S++;
     
                    n = Mots->IndexOf( P );
                    if(n == -1)
                        {
                        Mots->Add( P );
                        Count[Mots->Count - 1] = 1;
                        }
                    else
                        {
                        Count[n]++;
                        }
     
                P = S;
                }
            else
                {
                S++;
                }
            }
        }
    Memo2->Lines->Clear();
    for(n = 0; n < Mots->Count; n++)
        {
        Memo2->Lines->Add(Mots->Strings[n] + " = " + IntToStr(Count[n]));
        }
    }
    //--- Pour charger le fichier : un bouton
    void __fastcall TForm1::SpeedButton2Click(TObject *Sender)
    {
    if(OpenDialog1->Execute())
        {
        Memo1->Lines->LoadFromFile(OpenDialog1->FileName);
        }
    }
    //---
    A plus !

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2010
    Messages : 69
    Par défaut
    bonsoir,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    strcpy(Buffer, Memo1->Lines->Strings[j].c_str());
    sert à quoi stp ?

  4. #4
    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 !

    strcpy(Buffer, Memo1->Lines->Strings[j].c_str());
    Sert à copier le contenu de la chaîne AnsiString dans un tableau de char pour ne pas utiliser d'algo basé sur AnsiString::SubString.
    Celà permet en particulier de modifier un espace en 0 pour obtenir des chaînes se terminant par un NUL.
    In fine cela découpe la phrase en mots (en sous tableaux).
    Donc l'algo progresse de char en char (pointeur S) et de mots en mots (point P).

    A plus !

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2010
    Messages : 69
    Par défaut
    bonjour,
    lorsque jéssèye de compiler ce 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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    TForm2 *Form2;
    TFileStream * FStream;
     
    //---------------------------------------------------------------------------
     
    char Buffer[1024];
    int Count[1024];
    TStringList *Mots;
     
    //---------------------------------------------------------------------------
    __fastcall TForm2::TForm2(TComponent* Owner)
    	: TForm(Owner)
    {
    	Mots = new TStringList;
     
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm2::Button1Click(TObject *Sender)
    {
    FStream = new TFileStream("c:/monfichier.txt",fmCreate); //On instancie un nouvel objet de la classe TFileStream, fmCreate indique que l'on ouvre le fichier en mode écriture
    IdHTTP1->Get("http://www.cdip.com/",FStream);
    delete FStream; //On libère la ressource
     
     
     
    AnsiString Filename = "C:\\test.txt";
    if(FileExists(Filename))
    	{
    	Memo1->Lines->LoadFromFile(Filename);
    	}
    else
    	{
    	ShowMessage("Fichier inconnu");
    	}
     
     
     
    Mots->Clear();
    for(int j = 0; j < Memo1->Lines->Count; j++)
    	{
    			Edit1->Text=Memo1->Lines->Strings[j].c_str();
     
    		strcpy(Buffer,Memo1->Lines->Strings[j].c_str());
     
            }
     
    }

    j'ouvre un fichier qui se trouve sur mon ordi et jéssèye de compter les occurence de chaque mot.

    j'ai utiliser la fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strcpy(Buffer,Memo1->Lines->Strings[j].c_str());

    mais lorsque je compile il me dit qu'il y a une erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [BCC32 Erreur] Unit2.cpp(57): E2034 Impossible de convertir 'wchar_t *' en 'const char *'
    j'ai bosser toute la nuit dessus en cherchant la solution sans succès. j'ai modifier "char buffer[1024]" en "wchar_t buffer[1024]" mais ca ne marche pas

    aidez moi svp

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 573
    Par défaut
    Salut

    Le code compile sans probleme et l algo fait ce qui est prevu

    Je suis sur bcb 6

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 24
    Par défaut
    Bonjour,
    j'utiliserais le conteneur map de la STL pour traiter ton problème plus simplement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #include <map>
     
    std::map<std::string,int>  ma_liste;
    // et quand tu parcours ton texte, tu fais pour chaque chaîne trouvée
    ++ma_liste[chaine_courante];

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2010
    Messages : 69
    Par défaut
    bonsoir,
    je vous remercie tous pour votre aide,
    merci pour toute l'attention,
    mon programme tourne enfin

    vous m'avez grandement aidé

    encor merci

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

Discussions similaires

  1. compter le nombre de mots dans une chaine en php
    Par hadjiphp dans le forum Langage
    Réponses: 6
    Dernier message: 22/04/2009, 21h20
  2. Réponses: 4
    Dernier message: 04/03/2009, 10h18
  3. compter le nombre de mot dans une ligne fichier sous shell
    Par ninsekh dans le forum Shell et commandes GNU
    Réponses: 7
    Dernier message: 18/12/2008, 17h54
  4. Réponses: 3
    Dernier message: 17/11/2008, 23h48
  5. Réponses: 3
    Dernier message: 08/07/2008, 11h06

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