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 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
|
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* -TC- A quelques exceptions prêtes, utiliser des variables
globales, c'est mal!*/
char sz1[50], sz2[50];
int compression (void)
{
int i, j, n=0, j=0; /* -TC- il y avait un point-virgule au mauvais endroit*/
/* -TC- J'utilise plutôt '\0' que 0 pour faire référence au
caractère nul */
for (i = 0; sz1[i] != 0; i++)
{
n++;
}
/* -TC- Pour plus de clareté dans le code, j'utilise toujours les
accolades, même lorsqu'une boucle for/while ne compte
qu'une instruction. Ca n'engage que moi... */
for (i = 0; i < n; i++)
{
if (sz1[i] != ' ')
{
sz2[j] = sz1[i];
j++;
}
}
/* -TC- Ici, l'utilisation de strcpy est OK (sz1 et sz2 ont la même taille),
mais cette fonction peut réserver des surprises. J'utilise en général
strncat */
strcpy(sz1, sz2);
printf("apres compression : %s\n", sz2);
/* -TC- A quoi cela sert-il de retourner un entier si c'est toujours 0?*/
return 0;
}
int inversion (void) // inverse les caractères d'une chaine : abc=>cba
{
char c;
int i, j, n;
n=0;
j=1;
for (i = 0; sz2[i] != 0; i++)
{
n++;
}
/* -TC- l'indice j est inutile ici*/
for(i = 0; i < n/2; i++)
{
c = sz2[i];
sz2[i] = sz2[n-j];
sz2[n-j] = c;
j++;
}
printf("apres inversion : %s\n", sz2);
/* _TC- même remarque que pour compression() */
return 0;
}
int test_palindrome (void)
{
/* -TC- ou simplement return !strcmp(sz1, sz2) */
if (strcmp(sz1,sz2))
return 0;
else
return 1;
}
int main(int argc, char *argv[])
{
/* -TC- Dire à l'utilisateur ce qu'il doit faire:
printf("Entrez une chaîne: ");
fflush(stdout); */
/* -TC- fgets, c'est bcp plus compliqué: fgets(sz1, sizeof sz1, stdin);
Si la chaîne entrée par l'utilisateur fait 50 caractères ou plus, il n'y a
pas de caractère nul à la fin de sz1 et les fonctions compression et
inverser ne fonctionnent plus. */
gets(sz1);
/* N'oublie pas d'enlever le saut de ligne à la fin de la chaîne. Une
chaîne telle que "SOS\n" ne sera pas considérée comme un
palindrome par ton code */
compression();
inversion();
if (test_palindrome())
puts("c'est un palindrome");
else puts("ce n'est pas un palindrome");
system("PAUSE");
return 0;
} |
Partager