Comparer deux string [Résolu]

Signaler
Messages postés
13
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
27 novembre 2011
-
Messages postés
14865
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
23 novembre 2020
-
voici le code:
for(i=0;i<maxDF;i++)
{
for(j=1;j<(maxS+1);j++)
{
if(tabDF[i][j]!=NULL)
{
for(k=0;k<=fins;k++)
{
if(tabDF[i][j]==tabS[k])
{			
y=1;
}
}
if(y==0)
{
tabS[fins]=tabDF[i][j];
fins++;
}
y=0;
}
}
}

il y'a des valeurs de tabS qui ressemble exactement à tabDF mais jamais la condition "if" n'est verifié, j'ai beau essayé la même procédure dans un code à part, et ça marche parfaitement.
le tableau tabS c'est un tableau char **tabS une dimension mais de chaine de caractère, le deuxième tabDF c'est un char ***tabDF deux dimensions chaine de caractère .
merci pour toute suggestion.

9 réponses

Messages postés
14865
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
23 novembre 2020
93
Bon, je pars du principe que ton tableau 2D est bon. Voici l'algo que je verrais.
Pour le parcourir, effectivement, il te faut 2 boucles imbriquées
Après, pour chaque chaine du tableau 2D
Vérifier que cette chaine n'apparait pas dans ton tableau résultat:
Pour chaque chaine sauvée
Est-elle identique à la "chaine 2D"
Si non, l'ajouter*
fpour
fpour

*Pour l'ajouter:
tabS[i] = (char*)malloc(strlen(chaine2D)+1);
strcpy(tabS[i++], chaine2D);

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Rejoignez mon réseau professionnel sur Viadeo
Messages postés
14865
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
23 novembre 2020
93
Hello,
On ne fait pas de "==" entre chaines de caractères.
Pour cela, utilises strcmp() ou stricmp()

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Rejoignez mon réseau professionnel sur Viadeo
Messages postés
13
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
27 novembre 2011

marche pas, erreur de segmentation
Messages postés
14865
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
23 novembre 2020
93
ça veut dire que tes chaines sont mal formatées (manque le dernier \0 par exemple)

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Rejoignez mon réseau professionnel sur Viadeo
Messages postés
13
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
27 novembre 2011

en faite je compare deux chaines de caractère , la première se trouve dans un tableau a une dimensions

{char **tab1; tab1=(char**)malloc(sizeof(char*)*nbr);}

la deuxième se trouve dans un tableau à deux dimensions

{char ***tab2; tab2=(char***)malloc(sizeof(char**)*nbr);
for(i=0;i<nbr;i++)
{ tab2[i]=(char**)malloc(sizeof(char*)*nbr)} }

et je fais par exemple: char *chaine; chaine = "truc"; tab2[i][j]=chaine;
puis char *chaine2; chaine2="machin"; tab1[i]=chaine2;
et lors de la comparaison, strcmp(tab1[i],tab2[i][j]) ça foire
Messages postés
14865
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
23 novembre 2020
93
{char **tab1; tab1=(char**)malloc(sizeof(char*)*nbr+1);}

il ne faut pas oublier le caractère de fin de chaine.

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Rejoignez mon réseau professionnel sur Viadeo
Messages postés
13
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
27 novembre 2011

justement comment on le rajoute , parceque moi l'allocation dynamique est faite juste pour les cases du tableau, j'ai pas du tout fait l'allocation pour les caractères de la chaine, vu que je ne conné pas la taille de chaque chaine.
Messages postés
14865
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
23 novembre 2020
93
Je/tu m'embrouilles...
D'où te viennent tes chaines de caractères? L'intérêt justement de l'allocation dynamique réside dans le fait de ne pas connaître les tailles des chaines à la compil.

D'ailleurs, quel est l'objectif de ton code?

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Rejoignez mon réseau professionnel sur Viadeo
Messages postés
13
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
27 novembre 2011

alors le tableau a une dimension doit contenir toutes les chaines de caractère du tableau a deux dimensions sans redondance.