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++

  1. #1
    Nouveau candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2018
    Messages : 1
    Par défaut Chaîne de caractères
    Bonjour a tous,

    Je suis actuellement en master et c'est la première fois que je code cette année en C++.
    Nous avons un devoir maison à rendre, mais j'ai du mal à commencer car les consignes sont très strictes :
    On suppose que la librairie string.h n'existe pas. Interdit d'utiliser les fonctions strlen, strcmp, strcpy. Il est par contre conseillé d'utiliser les fonctions d'affichage et de saisie : cout et cin. La fonctions gets est utilisée afin de pouvoir saisir des chaines de caractères comportant des espaces.

    Je n'arrive pas à me lancer, le peu que j'ai fais :

    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
    #include <iostream> 
    #include <cstdlib>
    #include <cstdio>   
     
    using namespace std; 
     
    int main()
    {
        // Declaration des variables
        char chaine1[100];   // 4 chaines necessaires, 100 caracteres max. (arbitraire) dont le '\0'
        char chaine2[100];
        char *pchaine3; 
        pchaine3=NULL;
        char chaine4[100];
        int longueur1, longueur2;   // Pour le stockage des longueurs de chaine1 et chaine2
        char car_cherche;
        int i, j;  
     
         cout << "Saisir la premiere chaine :" << endl;
        gets(chaine1);
         i = 0;
            while (chaine1[i] != '\0')  )
    {
    Apres le while je bloque je sais qu'il faut que j'incrémente i tant que que le caractère i est différents du '\0'.
    Mon devoir maison contient 10 questions.
    Pouvez vous m'aider s'il vous plait.

    Nom : devoir maison.PNG
Affichages : 359
Taille : 30,8 KoNom : devoir maison 2.PNG
Affichages : 457
Taille : 52,3 Ko

  2. #2
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 80
    Par défaut
    salut,
    en partant sur ce que tu a fais il te manque juste a incrémenter ton i dans le while et ensuite afficher le i pour avoir la réponse a la première question

  3. #3
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Il faut en effet incrémenter i ! C'est comme si tu le faisais à la main : tant que tu ne trouves le caractère de fin de chaines, tu continues à compter et tu passes au caractère suivant.

    Note : n'utilises pas gets() mais fgets(). J'explique ici pourquoi : https://gradot.wordpress.com/2013/05...-programmes-c/

  4. #4
    Membre Expert
    Avatar de Pyramidev
    Homme Profil pro
    Tech Lead
    Inscrit en
    Avril 2016
    Messages
    1 512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Tech Lead

    Informations forums :
    Inscription : Avril 2016
    Messages : 1 512
    Par défaut
    Bonjour,

    Pédagogiquement, cet exercice est foireux.

    En C++, la fonction std::gets est dépréciée en C++11 et supprimée en C++14. En C, gets est supprimée en C11. Elle est supprimée car son existence est une erreur de conception dans la bibliothèque standard du langage C.

    En C++, la manière facile de lire une ligne est d'utiliser std::getline. Mais, visiblement, l'exercice veut que l'on écrive un code proche du langage C.

    Dans ce cas, comme le dit Bktero, une bonne solution serait d'utiliser fgets. Mais c'est compliqué de le faire correctement car, jusqu'à ce que l'on atteigne la fin de la ligne, il faut appeler fgets en boucle pour remplir un tableau dynamique dont on agrandit régulièrement la taille à coup de realloc. La question 1 devient alors plus compliquée que la question 4.

    Si la phrase « La fonction gets est utilisée afin de pouvoir saisir des chaines de caractères comportant des espaces. » fait partie de la consigne, alors utilise gets, mais sache qu'il ne faudra surtout pas l'utiliser dans un vrai programme hors du milieu scolaire.

    Bonne chance.

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