1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mai 2016
    Messages : 6
    Points : 4
    Points
    4

    Par défaut Chaînes de caractères

    Bonjour moi c'est valeron je suis débutant en C et je dois résoudre un problème càd qu'on me demande d'écrire un programme qui conjuge un verbe à l'imparfait du subjonctif .
    J'ai donc réalisé un algo pour récupérer la racine du verbe :

    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
     
    #include <stdio.h>
    #include <stdlib.h>
     
    char c[], r[100];
     
    int main()
    {
        int i, j;
        printf("Entrez votre verbe au choix\n");
        scanf("%s", c);
        i = strlen(c);
        printf("%d\n", i);
        j = i - 2;
        do
        {
            c[j] = '\0';
            j = j - 1;
        }
        while (j < i - 4);
        strcpy(r, c);
        printf("%s", r);
        return 0;
    }
    Mon soucis c'est qu'au débat j'ai initialisé j à i-1 et la condition de sortie était j<i-3 et quand je test avec le verbe manger j'obtient "mange" mais avec j à i-2 et la condition de sortie à j <i-4 je trouve bien "mang" ?
    j'aimerais donc connaître la raison sachant que strlen retourne juste le nombre de caractères de c sans tenir compte de la fin de chaîne.

    Excusez-moi d'avoir été long et merci d'avance pour votre aide.

  2. #2
    Membre expert
    Inscrit en
    mars 2005
    Messages
    1 107
    Détails du profil
    Informations forums :
    Inscription : mars 2005
    Messages : 1 107
    Points : 3 233
    Points
    3 233

    Par défaut

    Tu ne réserves aucun espace en déclarant char c[] : comme tu n'accompagnes pas la déclaration d'une initialisation, il s'agit d'un tableau vide.

    Les fonctions de manipulation de chaînes sont déclarées dans string.h, que tu n'inclus pas.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mai 2016
    Messages : 6
    Points : 4
    Points
    4

    Par défaut

    je viens d'inclure <string.h> mais toujours la même chose
    ah j'ai donc crée un tableau vide de chaines de caractères j'ai cru que puisque je ne connais pas la taille de mon verbe je pouvais le faire ainsi.... que dois-je faire alors .
    sinon le code marche pour n'importe quel mot , ce programme envèle juste les 2 dernières lettres du mot entrée.

  4. #4
    Membre expert
    Inscrit en
    mars 2005
    Messages
    1 107
    Détails du profil
    Informations forums :
    Inscription : mars 2005
    Messages : 1 107
    Points : 3 233
    Points
    3 233

    Par défaut

    Citation Envoyé par Attien Voir le message
    j'ai cru que puisque je ne connais pas la taille de mon verbe je pouvais le faire ainsi.... que dois-je faire alors .
    1. Relire le cours de C.
    2. Trois solutions possible :
      • déclarer un tableau de taille fixe et s'assurer que la taille de ce que l'on y met ne l'excède jamais ;
      • allouer un VLA (variable length array) sur la pile ;
      • allouer le buffer sur le tas via malloc.


    Je suis curieux de savoir ensuite ce que tu penses que ton programme fait, es-tu sûr qu'il conjugue correctement le verbe entré ?

    Pour que tu ne perdes pas trop de temps : while (j < i - 4); est au mieux un no-op, au pire une boucle infinie.

  5. #5
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    février 2006
    Messages
    5 924
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : février 2006
    Messages : 5 924
    Points : 16 371
    Points
    16 371
    Billets dans le blog
    1

    Par défaut

    Citation Envoyé par Attien Voir le message
    Bonjour moi c'est valeron je suis débutant en C et je dois résoudre un problème càd qu'on me demande d'écrire un programme qui conjuge un verbe à l'imparfait du subjonctif .
    Bonjour

    Pas évident. Pour "manger" dont tu as pris l'exemple ça donnera "que je mangeasse" donc ok, on enlève le "r" et on rajoute "asse" (et l'algo devient de suite plus drôle avec "pouffir" mais ça c'est pas trop un verbe ) mais si on doit conjuguer "prendre" (que je prisse) ça va devenir de suite un peu plus compliqué...

    Citation Envoyé par Attien Voir le message
    J'ai donc réalisé un algo pour récupérer la racine du verbe :
    Pourquoi "-2" ??? Enlever le "r" c'est enlever un caractère. Et pourquoi tu écris c[j]='\0' "what mille" fois ? Une chaine se termine par un '\0' donc "un seul" suffit. Juste le mettre au bon endroit quoi...
    Pour le reste ben lire les autres posts et essayer de revoir ton algo parce que là, j'ai l'impression que tu pars dans tous les sens (i-4 ??? :)

    Accessoirement essaye d'éviter les variables globales. Ce n'est pas interdit mais ça te procurera mille fois plus de problèmes que ce que ça t'en résoudra...
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mai 2016
    Messages : 6
    Points : 4
    Points
    4

    Par défaut

    ok merci à tous pour votre aide ... je vais corriger mon algo et vous le montrez.

Discussions similaires

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

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