Comparer deux string

Résolu
roubalist21 Messages postés 13 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 27 novembre 2011 - 16 déc. 2010 à 00:43
BunoCS Messages postés 15318 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 6 octobre 2022 - 16 déc. 2010 à 14:18
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

BunoCS Messages postés 15318 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 6 octobre 2022 103
16 déc. 2010 à 14:18
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
3
BunoCS Messages postés 15318 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 6 octobre 2022 103
16 déc. 2010 à 09:22
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
0
roubalist21 Messages postés 13 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 27 novembre 2011
16 déc. 2010 à 11:40
marche pas, erreur de segmentation
0
BunoCS Messages postés 15318 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 6 octobre 2022 103
16 déc. 2010 à 11:42
ç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
0

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

Posez votre question
roubalist21 Messages postés 13 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 27 novembre 2011
16 déc. 2010 à 11:57
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
0
BunoCS Messages postés 15318 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 6 octobre 2022 103
16 déc. 2010 à 12:02
{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
0
roubalist21 Messages postés 13 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 27 novembre 2011
16 déc. 2010 à 12:09
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.
0
BunoCS Messages postés 15318 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 6 octobre 2022 103
16 déc. 2010 à 13:56
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
0
roubalist21 Messages postés 13 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 27 novembre 2011
16 déc. 2010 à 14:03
alors le tableau a une dimension doit contenir toutes les chaines de caractère du tableau a deux dimensions sans redondance.
0