Je trouve pas ou est le probleme

Fermé
info2009 Messages postés 773 Date d'inscription samedi 20 octobre 2007 Statut Membre Dernière intervention 4 mars 2016 - Modifié par info2009 le 5/01/2011 à 16:32
info2009 Messages postés 773 Date d'inscription samedi 20 octobre 2007 Statut Membre Dernière intervention 4 mars 2016 - 5 janv. 2011 à 21:50
Bonjour,
voilà le code source de mon programme qui est en c++builder 6
st=Form1->Memo1->Text;
st = st.Trim();
while ((x=st.Pos(" ")) > 0 )
{text= st.SubString(1,x);
int I = CompareStr(text,"salut");
if (I== 0)
{ ShowMessage ("hello");
}
st.Delete(1,x);
st = st.TrimLeft(); }


dans ce programme j'essaye de comparer deux chaines de caractère une se trouve dans un memo et l'autre est une constante ...avec le code source que j'ai écrie ça ne marche pas la comparaison ..est ce que vous pouvez m'aidez a trouvé ou est le probleme

merci d'avance






7 réponses

Doctor C Messages postés 627 Date d'inscription mardi 12 juin 2007 Statut Membre Dernière intervention 19 février 2016 398
5 janv. 2011 à 21:05
Pas trop vite là!

"salut" et "salut", c'est pareil.
"salut" et "salut ", c'est différent. Remarque l'espace à la fin de la chaîne.

L'espace est un caractère ce qui rend la chaîne "salut " aussi différente de "salut" que par exemple "salutm" ou "salut3".

Il faudrait peut-être que tu appliques un Trim sur ta variable text avant de la comparer.

Autre note, je ne sais pas trop c'est quoi ta fonction CompareStr mais j'utilise normalement strcmp().

Bonne chance!
1
UgglyBoy Messages postés 422 Date d'inscription mercredi 24 septembre 2008 Statut Membre Dernière intervention 30 mai 2015 64
5 janv. 2011 à 16:40
à la 3eme ligne, x n'aura jamais une autre valeur que 0 (ou null)
0
info2009 Messages postés 773 Date d'inscription samedi 20 octobre 2007 Statut Membre Dernière intervention 4 mars 2016 15
5 janv. 2011 à 18:48
non il y a un texte dans le memo ce qui ne marche pas c'est la fonction de comparaison
0
UgglyBoy Messages postés 422 Date d'inscription mercredi 24 septembre 2008 Statut Membre Dernière intervention 30 mai 2015 64
5 janv. 2011 à 19:58
(x=st.Pos(" ")) veut bien dire que x prend la valeur de la position du 1er espace du texte st. donc s'il n'y a pas d'espace dans le texte source, x sera toujours egale à zéro, non?
0

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

Posez votre question
info2009 Messages postés 773 Date d'inscription samedi 20 octobre 2007 Statut Membre Dernière intervention 4 mars 2016 15
5 janv. 2011 à 20:22
avant je vous remercie infiniment de me répondre
non la partie qui ne marche pas c'est celle là
int I = CompareStr(text,"salut");
if (I== 0)
{ ShowMessage ("hello");
}

par contre le code dont tu parle il fonctionne très bien si par exemple j'écris dans le memo "salut tout le monde "
au début st= "salut tout le monde"
x prend la position du après le mot salut
puis text = "salut" mais le problème si je fait la comparaison suivante ne fonctionne pas pas
int I = CompareStr(text,"salut"); malgrés que text= "salut "
0
Doctor C Messages postés 627 Date d'inscription mardi 12 juin 2007 Statut Membre Dernière intervention 19 février 2016 398
5 janv. 2011 à 20:30
Qu'est-ce que tu veux dire par "la comparaison ne fonctionne pas"?

Si tu veux dire qu'elle retourne faux (autre que 0), c'est normal étant donné que "salut" et "salut " ne sont pas la même chaîne de caractères. Ces deux chaînes sont différentes.
0
info2009 Messages postés 773 Date d'inscription samedi 20 octobre 2007 Statut Membre Dernière intervention 4 mars 2016 15
5 janv. 2011 à 20:41
ouiiiiiiiiiii merci c'est ça mon problème ....pour quoi "salut" et "salut" ne sont pas identique ????
et comment je peut faire une tel comparaison ???????
0
info2009 Messages postés 773 Date d'inscription samedi 20 octobre 2007 Statut Membre Dernière intervention 4 mars 2016 15
5 janv. 2011 à 21:50
ouiiiiiiiiiiiiiiiiiiiii merciiiiiii infiniment ça marché on éliminant l'espace ()

la fonction AnsiCompareStr() fait la comparaison entre les deux chaines de caractéres en prenant en compte la casse ( majuscule et minuscule)
merci encore une fois
0