Comparaison de chaine [Résolu]

Signaler
Messages postés
57
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
21 avril 2006
-
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
-
Bonjour à tous,

Je voudrais comparer les 8 derniers caractères d'une chaine de caractères en c++(v1.5), si elle sont égales alors action1 sinon action2.

J'ai déja essayer de réaliser qqc mais à chaque fois il me réponds que les chaines sont identiques.

Merci d'aider le débutant que je suis.

Erwan

9 réponses

Messages postés
231
Date d'inscription
mercredi 12 février 2003
Statut
Membre
Dernière intervention
7 juillet 2009

Tiens essaye dans ce format:

int cmp(char *str1,char *str2) {
int max1 = strlen(str1);
int max2 = strlen(str2);
int p1 = max1 - 8;
int p2 = max2 - 8;
int i = 0;
if (max1 < 8 || max2 < 8) return 0;
while (i < 8) {
if (str1[p1+i] != str2[p2+i]) return 0;
i++
}
return 1;
}
Messages postés
231
Date d'inscription
mercredi 12 février 2003
Statut
Membre
Dernière intervention
7 juillet 2009

Salut!

#include <string.h>
int cmp(char *str1,char *str2) {int max1 strlen(str1), max2 strlen(str2), p1 = max1 - 5, p2 = max2 - 5;
if (max1 < 5 || max2 < 5) return 0;
for (int i = 0;i < 5;i++) if (str1[p1+i] != str2[p2+i]) return 0;
return 1;
}


Usage: cmp(chaîne1,chaîne2), retourne 1 si les cinq derniers caractères de deux chaînes sont identiques.
Messages postés
231
Date d'inscription
mercredi 12 février 2003
Statut
Membre
Dernière intervention
7 juillet 2009

Arf j'ai mal lu, pour les huit derniers caractères, il suffit de remplacer les "5" par des "8" (sans les guillemets bien sûr).
Messages postés
364
Date d'inscription
mercredi 11 février 2004
Statut
Membre
Dernière intervention
5 octobre 2006
2
Qu'est que tu as déjà fait ?

// Ma participation à la saturation du net:
// http://hylvenir.free.fr
Messages postés
57
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
21 avril 2006

Merci pour votre aide!

J'ai placé le module de Hades53 à la fin de mon code et ceci dans mon code :

if (cmp(CodeA,CodeAprime)==1){
im_clear_screen();
Affiche(0,0,"A ");
Affiche(0,3,CodeA);
Affiche(1,0,"A' ");
Affiche(1,3,CodeAprime);
Affiche(5,0,"Si OK_______ Enter");
}

J'obtiens les erreurs suivantes :

c:\docume~1\famille\bureau\copied~1\trakker.c(550) : error C2143: syntax error : missing ';' before 'type'
c:\docume~1\famille\bureau\copied~1\trakker.c(550) : error C2143: syntax error : missing ';' before 'type'
c:\docume~1\famille\bureau\copied~1\trakker.c(550) : error C2062: type 'int ' unexpected
c:\docume~1\famille\bureau\copied~1\trakker.c(550) : error C2065: 'i' : undeclared identifier
c:\docume~1\famille\bureau\copied~1\trakker.c(550) : error C2143: syntax error : missing ';' before ')'

la ligne 550 est la ligne qui contient le for

Voyez vous d'où ça vient?
Messages postés
231
Date d'inscription
mercredi 12 février 2003
Statut
Membre
Dernière intervention
7 juillet 2009

Place le module au début ou dans un fichier .h.
Si tu le places à la fin, ça risquera vraiment pas de marcher.
Messages postés
57
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
21 avril 2006

merci beaucoup!

Ca marche à la perfection!
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Solution plus propre: utiliser strncmp, cette fonction est faite pour comparer les n premiers caractères de deux chines
strncmp(str1, str2, n);
renvoie un résultat du même type de strcmp (nul si egal...)
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
erwan35 > sincerement prefere la solution de vecchio56

et on est bien d'accord qu'en c++ tu aurais tout a gagner a utiliser std::string...