Bonsoir,
je suis confronté à un problème: trier dans l'ordre alphabétique des chaines de caractères contenu dans des listes chainés.

Ca fonctionne pour la première chaine mais le reste ne passe pas, je boucle inf.
je pense que le problème vient de la manipulation des pointeurs ..
je print au fur et à mesure ma chaine (trié donc) quand j'ai une chaine trié je mets seen à 1 pour dire que je l'ai déjà print.

j'ai pris pour exemple ces noms: -Charvet
-LeeNolin
-Anderson
-Hassel

ducoup j'ai comme output : Anderson
Charvet (x9)


je dois mal m'y prendre avec les pointeurs , je n'ai pas tout précisé , si vous avez des questions n'hésitez pas.
Merci

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
int 	check_seen_all(t_employee *emp)
{
  int i;
 
  i = 0;
  while (emp->next != NULL)
    {
      if (emp->seen != 1)
	return (1);
      emp = emp->next;
    }
  return (0);
}
 
char 	*choose(t_employee *emp)
{
  while (emp->next != NULL)
    {
      if (emp->seen == 0)
	return (emp->lname);
      emp = emp->next;
    }
  return (NULL);
}
 
int 	check_order(char *str, t_employee *emp)
{
  while (emp->next != NULL)
    {
      if (strcmp(str, emp->next->lname) > 0 && emp->seen != 1)
	return (-1);
      emp = emp->next;
    }
  return (0);
}
 
void 	sort_all(t_employee *emp) 
{
  t_employee *tmp;
  char *str;
  int i;
 
  i = 0;
  tmp = emp;
  str = my_malloc(sizeof(char) * 20);
  while (/*check_seen_all(tmp) != 0*/i != 10) //le i est provisoire, c'est pour éviter la boucle inf
    {
      str = choose(emp);
      while (emp->next != NULL) 
	{
	  if (strcmp(str, emp->next->lname) > 0 && emp->seen != 1) //si la str est avant l'élément de la liste et si je n'ai pas print cet élément 
	    {
	      str = emp->next->lname; // je change la str avec la nouvelle chaine
	      if (check_order(str, emp) == 0) //  si l'élément est bien le premier dans l'apha je marque l'élément comme vu
		emp->seen = 1; 
	    }
	  emp = emp->next;
	}
      printf("%s\n", str); // print du str (le premier élément dans l'alpha et pas encore vu)
      emp = tmp;
      i++;
    }
}