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

SL & STL C++ Discussion :

2 problèmes (cin.getline et operateur de surcharge <<)


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 13
    Par défaut 2 problèmes (cin.getline et operateur de surcharge <<)
    le programme ci-dessous permet de rechercher les occurences d'un mot et de les afficher à l'écran.
    exemple: en tapant le prénom philippe voici ce qui apparaît à l'écran :

    introduisez un mot ou des mots (maximum 15 lettres)
    philippe

    affichage contenu tableau via fonction surcharge <<
    0x0012FF70

    affichage contenu tableau via fonction affichage classique
    philippe

    voici le resultat des occurences
    e--> 1
    h--> 1
    i--> 2
    l--> 1
    p--> 3

    verification tableau t2
    philippe
    Press any key to continue



    Dans l'élaboration du programme j'ai eu recours à quelques artifices qui ne me semblent vraiment pas adéquats lorsque on essaie de faire de la programmation dans les règles de l'art.
    1/ J'utilise la fonction cin.getline(tableau_intermediaire,LONGUEUR ,'\n' ) dans le corps du programme qui me permet d'encoder le mot caractère par caractère dans le tableau tableau_intermediaire et d'en sortir lorsque j'appuie sur la touche RETURN. Ensuite je réencode le mot via une fonction membre dans le tableau tableau.
    Donc je suis obligé de passer en paramètre de cin.getline l'argument tableau_intermediaire alors que je voudrais ne pas passer par le tableau_intermediaire mais directement par le constructeur par défaut ou par une fonction membre public de la class Tableau.
    Comment pourrais-je procéder pour remédier à ce problème ?
    2/J'ai aussi un problème avec l'opérateur de surcharge << qui m'affiche un résultat erroné --> 0x0012FF70.
    Comment pourrais-je procéder pour remédier à ce problème ?



    #include <iostream.h>
    #include <iomanip.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <ctype.h>
    #include<string.h>

    //using namespace std;
    const int LONGUEUR = 15;
    const int ALPHA = 26;

    class Tableau{
    private:
    int max;
    int nbEl;
    char* tableau;
    int tableau_occurence[ALPHA];
    public:
    //constructeur
    Tableau(int n){
    max = n;
    nbEl = 0;
    tableau = new char[n];
    };
    //déstructeur
    ~Tableau(){
    delete [] tableau;
    };
    //constructeur de copie
    Tableau(const Tableau & s){
    max = s.max;
    nbEl = s.nbEl;
    tableau = new char[max];
    for(int i = 0; i < nbEl; i++){
    tableau[i] = s.tableau[i];
    };
    };
    //nombre d'élements du mot encodé
    void initialisation_nbEl(int l_p){
    nbEl = l_p;
    };
    //encodage caractère du tableau intermédiaire (corps du programme) dans le tableau class private
    void encodage_mot_tableau(int i, char l){
    tableau[i] = l;
    };

    //affichage des caractères du tableau dans le corps du programme via la fonction opérateur de surcharge <<
    friend ostream& operator << (ostream& o, const Tableau* t){
    for(int i = 0; i < t->nbEl; i++){
    return o << t->tableau[i];
    };
    };

    //affichage des caractères du tableau dans le corps du programme via la fonction classique affichage
    void affichage_tableau(){
    for(int i = 0; i < nbEl; i++){
    cout << tableau[i];
    };
    };
    //26 cases du tableau tableau_occurence initialisées à 0
    void initialisation_tableau_occurence_a_0(){
    for(int i = 0; i < ALPHA; i++){
    tableau_occurence[i] = 0;
    };
    };
    //recherche des occurences + incrémentation dans le tableau_occurence
    void recherche_des_occurences_tableau(){
    for(int i = 0; i < nbEl; i++){
    if(('a' <= tableau[i]) && (tableau[i] <= 'z')){
    tableau_occurence[tableau[i] - 'a']++;
    };
    };
    };
    //affichage des occurences dans le tableau occurence
    void affichage_occurences_tableau(){
    for(int i = 0; i < ALPHA; i++){
    if(tableau_occurence[i] != 0){
    cout << (char) (i + 'a') << "--> " << tableau_occurence[i] << endl;
    };
    };
    };


    };

    int main(){
    Tableau* t1 = new Tableau(LONGUEUR);
    char tableau_intermediaire[LONGUEUR];
    char lettre;
    int longueur_phrase = 0;

    cout << "introduisez un mot ou des mots (maximum 15 lettres)" << endl;
    cin.getline(tableau_intermediaire, LONGUEUR, '\n');

    longueur_phrase = strlen(tableau_intermediaire);

    t1->initialisation_nbEl(longueur_phrase);

    for(int i = 0; i < longueur_phrase; i++){
    lettre = tableau_intermediaire[i];
    t1->encodage_mot_tableau(i, lettre);
    };
    cout << endl;
    cout << "affichage contenu tableau via fonction surcharge << " << endl;
    cout << &t1 << endl;
    cout << endl;
    cout << endl;

    cout << "affichage contenu tableau via fonction affichage classique" << endl;
    t1->affichage_tableau();
    cout << endl;
    cout << endl;
    t1->initialisation_tableau_occurence_a_0();
    t1->recherche_des_occurences_tableau();
    cout << "voici le resultat des occurences" << endl;
    t1->affichage_occurences_tableau();
    cout << endl;

    Tableau* t2;
    t2 = t1;
    cout << "verification tableau t2" << endl;
    t2->affichage_tableau();
    cout << endl;


    return 0;
    }

  2. #2
    Membre éclairé Avatar de Higestromm
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    516
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 516
    Par défaut
    1 - N'oublie pas d'utiliser les balises code
    2 - pourquoi tu n'utilise pas de std::string plutot que des tableaux ?

Discussions similaires

  1. Problème avec getline(cin, str)
    Par djoe43 dans le forum C++
    Réponses: 12
    Dernier message: 05/05/2010, 17h52
  2. Problème avec cin.getlin dans un for
    Par Carnat89 dans le forum Débuter
    Réponses: 2
    Dernier message: 02/07/2009, 21h09
  3. cin.getline et char * vide
    Par sawbo1 dans le forum SL & STL
    Réponses: 6
    Dernier message: 29/09/2006, 15h24
  4. Problème avec getline
    Par acieroid dans le forum C++
    Réponses: 6
    Dernier message: 26/04/2006, 10h16
  5. Problème avec getline().
    Par bouceka dans le forum C++
    Réponses: 4
    Dernier message: 23/01/2006, 18h23

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