IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Chaîne de Caractères


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2012
    Messages : 16
    Par défaut Chaîne de Caractères
    Bonsoir les développeurs!
    Débutante en C, j'implémente un programme vérifiant si une chaîne est un palindrome, en prenant en considération l'optimisation des instruction :
    Voilà 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
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<ctype.h>
    main(){
           char * s=malloc(sizeof(*s)*256);
           int i,j;
           printf("****VERIFICATION DES PALINDROMES****");
           printf("Veuillez saisir un mot  :\n");
           scanf("%s", &s);
           //char *str_tolower (char *s);
           printf("Vous avez saisie %s :\n");
           //int t=(int)taille;
           //int taille=strlen(s);
           /*DEBUT DU TRAITEMENT*/
           for(i=0;i<taille;i++)
           {for(j=taille;j>0;j--)
           {s[i] = tolower(s[i]);
           if(s[i]==s[j])
           printf("%s Votre mot est un palindrome.");
           else{
           printf("Désolé ce n'est pas un palindrome, veuillez ressayer!");
           }
           }}
           }
    Le code se compile mais ne s'execute pas.
    Merci de me signaler les erreurs, améliorations..

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Tout d'abord, lorsque tu présentes un code, ainsi que pour toi-même, veille à ce qu'il soit correctement indenté : cela facilite largement sa lecture.

    Ton code tel quel ne compile pas à moins de dé-commenter la ligne 14 qui permet la définition de ta variable taille inconnue sinon.

    Ton erreur vient de la ligne scanf("%s", &s);. Il faut différencier l'adresse du pointeur s (obtenu par &s) et l'adresse vers laquelle il pointe (adresse que tu viens d'allouer avec malloc). Ainsi il vient scanf("%s", s); sans le &.

    Un petit oubli je pense : printf("Vous avez saisie %s :\n" , s);
    Je te conseille d'autre part de revoir ton algorithme : ici tu vérifies chaque lettre avec toutes les autres et non seulement avec son "opposé" ( tu n'as besoin que d'une seule boucle.), et même une fois que tu as trouvé que ce n'était pas un palindrome, tu continues la vérification ( break par exemple).

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2012
    Messages : 16
    Par défaut Chaîne de Caractères
    Bonjour!
    Merci pour réponse ainsi que vos conseil.
    J'ai réecrit le code, j'ai appris la mauvaise habitude de programmer directement en langage donnée sans passé par la démarche algorithme
    puis quelque chose m'échappe, le programme ne fonctionne toujours pas, il affiche la chaîne saisie et s'achève.
    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
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<ctype.h>
    main(){
           //Allocation dynamique d'une chaine de caractère (taille variante)
           char * s=malloc(sizeof(*s)*256);
           int i;
           printf("*************VERIFICATION DES PALINDROMES**********\n");
           printf("Veuillez saisir un mot  :\n");
           //Lecture de la chaine
           scanf("%s", s);
           printf("Vous avez saisie %s :\n",s);
           //parcourir la chaine 
           //strlen(s) retourne la taille de la chaine s
           for(i=0;i<strlen(s);i++)
           //conversion des caractère en minuscule : tolower(s[i])
           {s[i] = tolower(s[i]);
           //vérification de ressemblance
           if(s[i]==s[strlen(s)]-i) 
           printf("Votre mot est un palindrome.");
           else{
           printf("Désolé ce n'est pas un palindrome, veuillez ressayer!");
           //une fois la condition n'est pas vérifier;afficher le message précedent puis échaper la boucle 
           break;
           }}
           }
    Merci.

  4. #4
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    - L'indentation est épouvantable !

    - L'erreur est ici : if(s[i]==s[strlen(s)]-i).

    - La conversion en minuscule est mal faite : s[i] est mis en minuscule alors que l'autre terme de comparaison ne l'est pas (encore)

    - L'affichage du succès est également faux et se fait à chaque lettre en correspondance trouvée.

  5. #5
    Membre chevronné

    Profil pro
    Inscrit en
    Août 2007
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 179
    Par défaut
    Au passage, à quoi bon parcourir l'ensemble des caractères de la chaine?
    Bon, c'est peut être plus une question à ce poser pour "optimiser" ton code quand le test fonctionnera mais en ce posant ce genre de question d'entrée on évite parfois certaines erreurs...

  6. #6
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2012
    Messages : 16
    Par défaut
    Citation Envoyé par diogene Voir le message
    - L'indentation est épouvantable !

    - L'erreur est ici : if(s[i]==s[strlen(s)]-i).

    - La conversion en minuscule est mal faite : s[i] est mis en minuscule alors que l'autre terme de comparaison ne l'est pas (encore)

    - L'affichage du succès est également faux et se fait à chaque lettre en correspondance trouvée.
    Bonjour!
    pour l'indentation qui est épouvantable, veuillez bien m'expliquer de plus.
    Exemple peut-être.
    Je vous remercie.

  7. #7
    Membre chevronné

    Profil pro
    Inscrit en
    Août 2007
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 179
    Par défaut
    Citation Envoyé par ByteCode07 Voir le message
    pour l'indentation qui est épouvantable, veuillez bien m'expliquer de plus.
    Salut,
    C'est peut être une question de définition : http://fr.wikipedia.org/wiki/Style_d%27indentation
    Sinon dans ton code il y a les include et la déclaration du main qui sont alignés tout à gauche de la page et tout le reste est aligné au même niveau, ce qui rend assez difficile la lecture du code.

    Les instructions internes au for devraient être décalées (sur la droite) par rapport au reste, pareil pour celles liées au if et else

    Sinon la plupart des éditeurs de textes utilisés pour la programmation font ça assez bien.

Discussions similaires

  1. Réponses: 8
    Dernier message: 12/02/2013, 01h08
  2. Réponses: 2
    Dernier message: 18/10/2003, 14h42
  3. Chaînes de caractères
    Par Zazeglu dans le forum C
    Réponses: 3
    Dernier message: 28/08/2003, 16h20
  4. Inverser une chaîne de caractères
    Par DBBB dans le forum Assembleur
    Réponses: 2
    Dernier message: 30/03/2003, 11h09
  5. Réponses: 3
    Dernier message: 09/05/2002, 01h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo