Partage
  • Partager sur Facebook
  • Partager sur Twitter

Palindrome

Test d'une phrase si elle est palindrome ou non

18 août 2016 à 12:38:15

j'ai crié une fonction void pour tester une phrase donnée si elle palindrome dans les 2 cas la fonction me dis que la phrase que j'ai saisi est non palindrome malgré qu'elle est exemple "was it a cat i saw" help me please voici mon code source je sais pas ou est le problème ...

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

void phrasesPalindromes(char ch[])
{
    int i,j,test;
    i=0;j=0;test=0;
    if(ch[j]==ch[strlen(ch)]) /*si le premier caractère est différent du dernier car' la phrase est non PAL'*/
    {
        j++;i++;
        while(test==0 && j!=(strlen(ch)-i))
        {
            if(ch[j]==' ')
            {
                j++;
            }
            if(ch[strlen(ch)-i]==' ')
            {
                i++;
            }
            if (ch[j]==ch[strlen(ch)-i])
            {
                j++;i++;
            }
            else
            {
                test=1;
            }
        }
        if(test==0)
        {
            printf("%s est une phrase palindrome\n\n",ch);

        }
        else
        {
            printf("%s nest pas une phrase palindrome...\n\n",ch);
        }
    }
    else
    {
        printf("%s nest pas une phrase palindrome...\n\n",ch);
    }
}

  • Partager sur Facebook
  • Partager sur Twitter
18 août 2016 à 13:17:14

Hello,

Je ne suis pas sûr à 100% mais ici:

//Imaginons:
char ch[7] = "serres"; //6 + 1 pour le \0

//premier tour de while: i/j = 1
//strlen(ch) = 6
//strlen(ch) - i = 5
//ch[5] == 's'
//ch[1/j] == 'e'
ch[j]==ch[strlen(ch)-i

Tu peux voir qu'ici tu compare la deuxième case de ton tableau avec la dernière car un tableau en C commence à ch[0] et non pas ch[1] et donc fini à ch[longueur - 1].

-
Edité par Linnea0 18 août 2016 à 13:18:05

  • Partager sur Facebook
  • Partager sur Twitter
19 août 2016 à 21:35:56

Salut,

  • Ta fonction est bien trop longue.
  • Utilise les balises codes du site (clique sur le bouton </> au dessus de la zone de texte quand tu écris un message et sélectionne C++).
  • "radar" est un palindrome, "Un roc si biscornu" en est un aussi. Comment gères-tu le second cas (c-a-d espaces et majuscules) ?
  • Les indices des tableaux et des chaînes de caractères en C et dans la plupart des langages de programmation vont de 0 à n-1, donc:
    ch[strlen(ch)]
    c'est déjà en dehors des limites du tableau.
    ch[strlen(ch)-1]
    est un accès valide.
  • Quelle est la condition d'arrêt de ta boucle while ? Tu comprendras pourquoi ton programme n'affichera jamais "%s est une phrase palindrome".
  • Un tableau ou une chaîne de caractère n'a pas d'indices négatifs, utilise size_t et non int pour itérer sur un tableau.
  • Ta fonction doit déterminer si une phrase est un palindrome, le mieux c'est qu'elle renvoie un int ou un bool (disponible dans la bibliothèque stdbool.h). Si tu compiles en C89 tu peux écrire cela avant la fonction main:
    typedef enum boolean {false, true} bool;
    et utiliser bool comme mot-clé avec les valeurs false et true.
Cordialement.
  • Partager sur Facebook
  • Partager sur Twitter
20 août 2016 à 16:15:26

Salut,

VaultBoy a écrit:

  • ch[strlen(ch)]
    c'est déjà en dehors des limites du tableau.

De la chaîne oui, mais pas du tableau : cela tombe sur le '\0'. N'oublie pas que strlen ne le prend pas en compte.

Mais il n'en reste pas moins vrai qu'il faille retrancher 1 pour accéder au vrai dernier caractère. :)

@ÌhabMìrage : Merci d'utiliser ce bouton pour montrer ton code.

  • Partager sur Facebook
  • Partager sur Twitter
20 août 2016 à 20:14:28

Squall31 a écrit:

Salut,

VaultBoy a écrit:

  • ch[strlen(ch)]
    c'est déjà en dehors des limites du tableau.

De la chaîne oui, mais pas du tableau : cela tombe sur le '\0'. N'oublie pas que strlen ne le prend pas en compte.

Exact, merci de m'avoir repris ;-).

  • Partager sur Facebook
  • Partager sur Twitter
9 octobre 2019 à 17:07:33

Un palindrome est un mot qui lit le même en arrière ou en avant.
Ecrivez une fonction qui vérifie si un mot donné est un palindrome. Les cas de caractère doivent être ignorés.
fonction isPalindrome ($ mot)
Par exemple, isPalindrome ("Deleveled") doit renvoyer true car la casse des caractères doit être ignorée, ce qui donne "deleveled", qui est un palindrome puisqu'il lit les mêmes informations en arrière et en avant.
  • Partager sur Facebook
  • Partager sur Twitter
9 octobre 2019 à 17:14:19

Bonjour,

Déterrage

Citation des règles générales du forum :

Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.

Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre.
En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.

Au lieu de déterrer un sujet il est préférable :

  • soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
  • soit de créer un nouveau sujet décrivant votre propre contexte
  • ne pas répondre à un déterrage et le signaler à la modération

Je ferme ce sujet. En cas de désaccord, me contacter par MP.

  • Partager sur Facebook
  • Partager sur Twitter