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 :

Nom : Capture_Prog_Palindrome.PNG
Affichages : 664
Taille : 6,7 Ko

Je vous remercie de m'éclairer.