Bonjour à tous.
Je voudrais créer un programme qui détermine si un mot (ou du texte) est un palindrome. On admettra qu'un mot est un palindrome s'il se lit indifféremment de gauche à droite ou de droite à gauche en donnant le même mot (par exemples : radar, SOS, kayak, Laval).
Je souhaite utiliser un algorithme qui copie à "l'envers" le mot à tester dans une chaîne de caractères : d'abord on crée une chaîne de caractères qui va recevoir le mot à tester caractère par caractère à partir du dernier caractère du mot à tester [1] ; ensuite, on compare la chaîne du mot à tester à celle du mot constitué par concaténation [2] ; si les 2 chaînes sont identiques alors le mot à tester est un palindrome sinon il ne l'est pas.
La concaténation s'effectue sauf que le mot inverse débute par un espace si bien qu'il a un caractère de plus (l'espace) que le mot à tester, ce qui est illogique !
Voici le code de mon programme :
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 #include <stdio.h> #include <stdlib.h> #include <string.h> #include "fichier_init.h" int main() { char mot[100], temp[2], reponse[2]; int i; do { system("cls"); printf("\n\n\t\t\t\tCE MOT EST-IL UN PALINDROME ?\n\n"); printf("Donnez le mot : "); fflush(stdin); saisirChaine(mot, 100); char inverse[100] = " "; for(i = strlen(mot); i>=0; i--) { temp[0] = mot[i]; strcat(inverse, temp); } printf("\n\n"); printf("L'inverse de \"%s\" est : \"%s\"\n", mot, inverse); printf("Longueur du mot \"%s\" est : %d\n", mot, strlen(mot)); printf("Longueur de l'inverse \"%s\" est : %d", inverse, strlen(inverse)); printf("\n\n"); if(strcmp(mot, inverse) == 0) { printf("Le mot \"%s\" est un palindrome", mot); } else { printf("Le mot \"%s\" n'est pas un palindrome", mot); } printf("\n\n"); do { printf("Voulez-vous recommencer (O/N)? : "); fflush(stdin); saisirChaine(reponse, 2); } while((reponse[0] != 'o')&&(reponse[0] != 'O')&&(reponse[0] != 'n')&&(reponse[0] != 'N')); } while((reponse[0] != 'n')&&(reponse[0] != 'N')); return 0; }
Je vous épargne de la définition de la fonction saisirChaine, cette fonction a été écrite à partir de la fonction fgets.
Voici la capture de l'exécution :
Je vous remercie de m'éclairer.
Partager