Compter les mots et les comparer

cs_piep14 Messages postés 345 Date d'inscription lundi 15 mars 2004 Statut Membre Dernière intervention 13 mai 2011 - 10 mai 2005 à 14:22
cs_piep14 Messages postés 345 Date d'inscription lundi 15 mars 2004 Statut Membre Dernière intervention 13 mai 2011 - 13 mai 2005 à 19:02
Je suis en train de reprendre le VC++ que j'ai abandonné il y a quelques temps.
J'ai une ptit appz a faire qui parait simple mais très dure car les souvenir sont loins ;)

J'ai un CEdit et un bouton, je tape un texte dans le CEdit et je souhaite afficher dans une fenetre le nombre de mots et les répétitions !!!

J'arrive pas trop alors si vous pouvez m'aiguiller un peu svp.

J'ai fait ca dans mon bouton :
void CVerificateurDlg::Verificateur()
{
CString str ;
m_edit.GetWindowText(str) ;
}

Merci de votre soutient

14 réponses

PACAL7585 Messages postés 18 Date d'inscription jeudi 27 janvier 2005 Statut Membre Dernière intervention 13 mai 2005
10 mai 2005 à 14:32
pour compter les mots et les séparer:



void foo(CString str)

{

int i = 0;

CStringArray strlist; // contient la list des mots

CString strtmp;



strlist.RemoveAll(); // vide la liste

strtmp.Empty();



while (i >= str.GetLength())

{

strtmp += str[i];

++i;

if (str[i] == ' ')

{

strlist.Add(strtmp);

strtmp.Empty();

++i; // pour ne pas prendre en compte l'espace

}

}






Pour avoir le nombre de mots strlist.GetCount()

pour avoir un mots en particulier strlist[nN], ou nN est la position du mot dans le tableau



voilà en espèrant que tu puisse avancer...



cordialement
0
cs_piep14 Messages postés 345 Date d'inscription lundi 15 mars 2004 Statut Membre Dernière intervention 13 mai 2011
10 mai 2005 à 14:40
Je fais comment pour utiliser ca avec le code que j'ai fournis, j'ai tout oublié c malheureux
0
PACAL7585 Messages postés 18 Date d'inscription jeudi 27 janvier 2005 Statut Membre Dernière intervention 13 mai 2005
10 mai 2005 à 15:01
ce que tu peux faire: tu crée une donnée membre de ta classe de type CStringArray.



void CVerificateurDlg::SepareMots()
{
CString str ;


int i = 0;

CString strtmp;




m_edit.GetWindowText(str) ;




strlist.RemoveAll(); // vide la liste

strtmp.Empty(); // vide le temp



while (i >= str.GetLength())

{


if (str[i] == ' ') // si le caractère suivant est un espace

{

strlist.Add(strtmp);

strtmp.Empty();

}

else // si c'est un autre caractère

{



strtmp += str[i]; // le ième caractère est ajouter à strtemp

}


++i;


}


}



quand tu clic sur ton button:



void
CVerificateurDlg::
Verificateur()


{

this->
SepareMots(); //ici tu crées ton tableau de mots

// ajoute le code pour faire ton traitement

}



bonne journée
0
cs_piep14 Messages postés 345 Date d'inscription lundi 15 mars 2004 Statut Membre Dernière intervention 13 mai 2011
10 mai 2005 à 15:48
Je ne me souviens plus comment on fais pour créer SepareMots avec le Class Wizard
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
PACAL7585 Messages postés 18 Date d'inscription jeudi 27 janvier 2005 Statut Membre Dernière intervention 13 mai 2005
10 mai 2005 à 19:09
C'est une simple petite fonction de rien du tout.... clique droit sur
le nom de la classe dans l'explorateur de class ajouter une fonction...



Ca fait combien de temps que tu as arrêté car ca c'est vraiment les bases...
0
cs_piep14 Messages postés 345 Date d'inscription lundi 15 mars 2004 Statut Membre Dernière intervention 13 mai 2011
11 mai 2005 à 14:09
J'ai donc bien compris tout ce que tu me dis et je pense que ca revient vite quand meme !!!

Mais j'obtiens quand meme des erreurs :



C:\Verificateur\VerificateurDlg.cpp(190) : error C2065: 'strlist' : undeclared identifier

C:\Verificateur\VerificateurDlg.cpp(190) : error C2228: left of '.RemoveAll' must have class/struct/union type

C:\Verificateur\VerificateurDlg.cpp(197) : error C2228: left of '.Add' must have class/struct/union type



Merci de tes conseils !!!
0
PACAL7585 Messages postés 18 Date d'inscription jeudi 27 janvier 2005 Statut Membre Dernière intervention 13 mai 2005
11 mai 2005 à 15:34
Est-ce que tu as ajouter une donnée membre ( ou variable) à ta classe appelée strlist de type CStringArray???

ca doit ressembler à ca:

class CVerificateurDlg
{
...
private:
CStringArray strlist;
...
}

Dsl pour la remarque dans le message précédent...
0
cs_piep14 Messages postés 345 Date d'inscription lundi 15 mars 2004 Statut Membre Dernière intervention 13 mai 2011
11 mai 2005 à 18:04
Oui je l'avais fait mais pas au bon endroit j'ai l'impression car j'ai
recommencer et maintenant je n'est plus les erreurs précédentes !!!



Par contre, il reste le traitement à faire et la je dois dire que ton aide pourra surement m'éclaircir !!



Merci beaucoup
0
cs_piep14 Messages postés 345 Date d'inscription lundi 15 mars 2004 Statut Membre Dernière intervention 13 mai 2011
13 mai 2005 à 17:26
Bonjour, a ce jour je n'ai toujours pas reussi a faire le traitement pour comparer les mots ???? et pourquoi pas les compter ??

Merci de m'éclaircir !!!
0
PACAL7585 Messages postés 18 Date d'inscription jeudi 27 janvier 2005 Statut Membre Dernière intervention 13 mai 2005
13 mai 2005 à 17:37
Salut,

Tu n'as pas besoin de compter les mots.

int nNbMots = (int) strlist.getcount(); // nNbMots contient le nombre de mots dans la list.

pour accéder a un mot en particulier tu fais:

CString str = strlist[n]; // où n est la position du mots dans l'array.

pour comparer tes mots entre eux tu peux faire une double boucle for.

exemple:

for (int i = 0 ; i < nNbMots ; ++i)
{
for (int j = 0 ; j < nNbMots ; ++j)
{
strlist[i]; // est le ième mot
strlist[j]; // est le jème mot
}
}

pour CArrayString va lire la doc sur MSDN, elle est très bien faite...

Bonne continuation.
0
cs_piep14 Messages postés 345 Date d'inscription lundi 15 mars 2004 Statut Membre Dernière intervention 13 mai 2011
13 mai 2005 à 17:47
Voici ou j'en suis :



void CVerificateurDlg::SepareMots()

{

CString str ;

int i = 0;

int nNbMots = (int) strlist.getcount(); // nNbMots contient le nombre de mots dans la list.

CString strtmp;



m_edit.GetWindowText(str) ;



strlist.RemoveAll(); // vide la liste

strtmp.Empty(); // vide le temp



while (i >= str.GetLength())

{

if (str[i] == ' ') // si le caractère suivant est un espace

{

strlist.Add(strtmp);

strtmp.Empty();

}

else // si c'est un autre caractère

{

strtmp += str[i]; // le ième caractère est ajouter à strtemp

}

++i;

}

}



getcount() ???? c'est quoi car cela m'affiche une erreur : 'getcount' : is not a member of 'CStringArray' ???



Merci les amis !!!
0
PACAL7585 Messages postés 18 Date d'inscription jeudi 27 janvier 2005 Statut Membre Dernière intervention 13 mai 2005
13 mai 2005 à 17:51
C'est un methode de CStringArray. Regarde sur MSDN. pour plus de detail. vérifie la casse. et avant de poster un message regarde toujours sur MSDN.

Bonne continuation
0
cs_piep14 Messages postés 345 Date d'inscription lundi 15 mars 2004 Statut Membre Dernière intervention 13 mai 2011
13 mai 2005 à 17:58
Bah meme si je met getCount l'erreur reste la meme !!!! Est ce que je l'ai placé au bon endroit Merci de ton soutient
0
cs_piep14 Messages postés 345 Date d'inscription lundi 15 mars 2004 Statut Membre Dernière intervention 13 mai 2011
13 mai 2005 à 19:02
Suite au explication de Pascal :



void CVerificateurDlg::Verificateur()

{

this->SepareMots(); //ici tu crées ton tableau de mots

// ajoute le code pour faire ton traitement

int nNbMots = (int) strlist.GetSize(); // nNbMots contient le nombre de mots dans la list.

}



void CVerificateurDlg::SepareMots()

{

CString str ;

int i = 0;

CString strtmp;



m_edit.GetWindowText(str) ;



strlist.RemoveAll(); // vide la liste

strtmp.Empty(); // vide le temp





while (i >= str.GetLength())

{

if (str[i] == ' ') // si le caractère suivant est un espace

{

strlist.Add(strtmp);

strtmp.Empty();

}

else // si c'est un autre caractère

{

strtmp += str[i]; // le ième caractère est ajouter à strtemp

}

++i;

}

}



Mais ensuite, c'est la grande question !!!
0
Rejoignez-nous