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 confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 120
    Par défaut Chaîne de caractères
    Bonjour,
    voilà je ne comprend pas pourquoi j'ai cette erreur : "exo8.c:7: attention : incompatible implicit declaration of built-in function «strlen""
    Le but de mon exercice est de vérifier si un mot est un palindrome (mot qui peut se lire de gauche à droite et vice-et-versa) renvoie 1 si oui et 0 si non.


    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
    #include<stdio.h>
    #include<stdlib.h>
    
    int palindrome(char *mot){
      int i,res;
      res=1;
      for(i=0;i<=(int)((strlen(mot)-1)/2);i++){
        if(mot[i]!=mot[strlen(mot)-i-1])res=0;
      }
      return res;
    }
    
    int main(void){
      char mot[50];
      printf("saisir un mot:");
      scanf("%s",mot);
      printf("résultat:%d\n",palindrome(mot));
      return 0;
    }
    Merci d'avance pour votre aide.

  2. #2
    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
    voilà je ne comprend pas pourquoi j'ai cette erreur : "exo8.c:7: attention : incompatible implicit declaration of built-in function «strlen""
    Le prototype de la fonction strlen est inconnu. Il faut inclure string.h où se trouve sa déclaration.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 120
    Par défaut
    Ha ok merci, je confond avec stdlib.h

  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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int main(void){
      char *mot;
      printf("saisir un mot:");
      scanf("%s",mot);
    ....
    est erroné : il faut un TABLEAU pour stocker le mot lu sur le clavier. Ici mot est un pointeur (un truc pour stocker une adresse) pas un tableau.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char mot[une valeur suffisante] ;

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 120
    Par défaut
    Oui merci, je l'est vu imédiatement en testant. (petit core dumped )

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 120
    Par défaut
    Autre petite question:
    est-ce possible d'initialiser un tableau de 10 entier seulement avec des pointeurs et sans allocation dynamique de la mémoire?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    include<stdio.h>
    int main(){
      int i; /*je sais pas comment déclarer la variable x sans faire x[10]*/
      for(i=0;i<=9;i++)
        *(x+i)=0;
      return 0;
    }
    Merci d'avance pour votre aide.

  7. #7
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      int i; /*je sais pas comment déclarer la variable x sans faire x[10]*/
    Moi non plus. La seule autre alternative est l'allocation dynamique (malloc), mais est-ce justifié ?
    s'écrit de façon plus claire comme

  8. #8
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Delnir Voir le message
    est-ce possible d'initialiser un tableau de 10 entier seulement avec des pointeurs et sans allocation dynamique de la mémoire?
    Non. Qu'est-ce qui ne va pas avec un tableau ? Par contre, on peut définir un pointeur sur un élément du tableau...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int tab[] = {0,0,0,0,0,0,0,0,0,0};
    int *pa = tab + 0; /* ou tab */
    int *pb = tab + 3;

  9. #9
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Delnir Voir le message
    Bonjour,
    voilà je ne comprend pas pourquoi j'ai cette erreur : "exo8.c:7: attention : incompatible implicit declaration of built-in function «strlen""
    Le but de mon exercice est de vérifier si un mot est un palindrome (mot qui peut se lire de gauche à droite et vice-et-versa) renvoie 1 si oui et 0 si non.
    Le comportement est indéfini.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    -------------- Build: Debug in hello ---------------
     
    Compiling: main.c
    Linking console executable: bin\Debug\hello.exe
    C:\dev\hello\main.c: In function `palindrome':
    C:\dev\hello\main.c:4: warning: implicit declaration of function `strlen'
    C:\dev\hello\main.c: In function `main':
    C:\dev\hello\main.c:12: warning: implicit declaration of function `printf'
    C:\dev\hello\main.c:13: warning: implicit declaration of function `scanf'
    Output size is 18.26 KB
    Process terminated with status 0 (0 minutes, 0 seconds)
    0 errors, 3 warnings
    Il faut inclure <string.h> et <stdio.h>

    L'algo est correct, mais un peu trop compliqué.
    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
     
    FUNCTION is_palindrome (s:STRING) : BOOL
    BEGIN
     pal := TRUE
     i := 0
     j := s.length() - 1
     
     WHILE pal AND i < j
      pal := s[i] == s[j]
      INC i
      DEC j
     END WHILE
     
     RETURN pal
    END

+ Répondre à la discussion
Cette discussion est résolue.

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