Bonjour,

j'ai écrit un programme permettant de comparer des mots suivants des fonctions de comparaison : ordre lexicographique, ordre lexicographique inverse et voyelles-consonnes.
Cette dernière fonction prend une chaine de caractere en parametre et met dans une autre chaine les voyelles au début puis utilise l'ordre lexicographique
En testant ma fonction qui réorganise une chaine de caractere, j'ai bien ce qu'il faut mais lorsque je teste la fonction voyellesConsonnes, la valeur de retour ne correspond pas à ce qu'il faut.

Voici mon code :
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
64
65
66
67
68
69
70
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
int cmpLexico(const char *s1, const char *s2)
{
  while(*s1++ == *s2++ && *s1!='\0')
    ;
  if(*s1 == '\0')
    return 0;
  else if(*s1 < *s2)
    return -1;
  else return 1;
}
 
int cmpInvLexico(const char *s1, const char *s2)
{
  return cmpLexico(s2, s1);
}
 
int voyelle(char c){
  if(c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u' || c == 'y')
    return 1;
  return 0;
}
 
char *modif(const char *s){
  int l = strlen(s);
  char *tmp = malloc(strlen(s));
  if(tmp == NULL)
    return NULL;
  int nbElem = 0;
  int i;
  for(i=0; i<l; i++)
    if(voyelle(s[i]))
      tmp[nbElem++] = s[i];
  for(i=0; i<l; i++)
    if(!voyelle(s[i]))
      tmp[nbElem++] = s[i];
  tmp[nbElem] = '\0';
  return tmp;
}
 
int voyellesConsonnes(const char *s1, const char *s2)
{
  char *m1 = modif(s1);
  char *m2 = modif(s2);
 
  return cmpLexico(m1,m2);
}
 
int main(int argc, char *argv[])
{
  if(argc != 3)
    {
      fprintf(stderr, "%s mot1 mot2\n", argv[0]);
      exit(EXIT_FAILURE);
    }
 
  printf("Ordre lexico : %d\n", cmpLexico(argv[1], argv[2]));
 
  printf("Ordre lexico inverse : %d\n", cmpInvLexico(argv[1], argv[2]));
 
  /*Test pour verifier que les modifs ont eu lieues*/
  char *m1 = modif(argv[1]);
  char *m2 = modif(argv[2]);
  printf("%s %s\n",m1,m2);
  printf("Ordre voyelles-consonnes : %d\n",voyellesConsonnes(argv[1], argv[2]));
  return EXIT_SUCCESS;
}
Ce que j'obtiens:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
$ ./test un deux
Ordre lexico : 1
Ordre lexico inverse : -1
un eudx
Ordre voyelles-consonnes : -1