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 :

chaine de caracteres


Sujet :

C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2011
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 96
    Par défaut chaine de caracteres
    Bonjour

    pourriez vous corrigez mes reponses en cas d'erreur

    Soit la classe suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    class string {
    ...
    protected:
    char* val; // les caracteres de la chaine
    int lng; // sa longueur
    };
    1 donnez l'operateur qui permet d'afficher une chaine (par exemple cout << s1 << "\n")
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void ostream::operator <<(string s) 
    {
      cout << s;
    }
    2 donnez le constructeur qui permet la declaration string s1 = "abcde"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    string:string(char* s)
    {
    	val = s;
    	lng = s.length();
    }
    3 donnez le constructeur qui permet la declaration string s2 = s1
    4 donnez l'operateur qui permet s2 = s1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    string(string &s2, string s1)(s2.val(s1.val), s2.lng(s1.lng) {}
    if((s2.val == s1.val) || (s2.lng == s1.lng)) return true;
    else return false;
    5 donnez l'operateur qui retourne le k-ieme caractere de la chaine (les caracteres sont indices a partir de 0), avec une exception si k est incorrect
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    char c kiemeLettre(string s, int pos) 
    {
    	if(pos > s.lng) throw {}
    	else 
           {
    		return s[pos - 1];
    	}
    }
    6 donnez l'operateur qui permet d'ecrire s1 += s2 (ajout de s2 a la fi n de s1)
    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
     
    void operator +=(string s1, string s2)
    { 
    	string s;
    	s.lng = (s1.lng + s2.lng - 1);
    	int i;
    	for(i = 0 ; i < s1.lng ; i++) 
            {
    		s[i] = s1[i];
    	}
    	for(i = s1.lng ; i < s.lng ; i++)
            {
    		s[i] = s2[i - s1.lng];
    	}
    	s[s.lng - 1] = "\o";
    	s1.val = s;
    }
    7 donnez l'operateur qui permet d'ecrire s1 + s2 (concatenation de 2 chaines)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    void operator +(string s1, string s2)
    { 
    	s1[s1.lng - 1] = s2.val;
    	s1.lng = s1.lng + s2.lng - 1;
    }

  2. #2
    screetch
    Invité(e)
    Par défaut
    il y a des erreurs (beaucoup) mais on ne fait pas les exercices ici.
    Tu peux commencer par regarder dans la FAQ ou dans les tutoriels C++, notemment a "classes copiables"
    et vu ton problème je te conseille de regarder des cours de C aussi, pour les chaines de caracteres C

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2011
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 96
    Par défaut
    merci pour votre reponse
    cependant
    Citation Envoyé par screetch Voir le message
    il y a des erreurs (beaucoup)
    peut-etres auriez-vous pu en note qlq'une.

    Citation Envoyé par screetch Voir le message
    et vu ton problème je te conseille de regarder des cours de C aussi, pour les chaines de caracteres C
    Ici il me semble que seul longueur et pointeur de type char* son utilise non ?

  4. #4
    screetch
    Invité(e)
    Par défaut
    les pointeurs de types char sont les chaines de caractere en C. en C++ elels sont abstraites dans la classe std::string
    leur manipulation est difficile.

    pour tes erreurs elles ont toutes un rapport avec cette gestion des chaines de caractere C (ou de pointeurs char*), car tu n'as pas l'air de comprendre comment elles marchent, c'est pour ca que je te conseille d'aller jeter un oeil sur les cours de C et sur les chaines C.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2011
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 96
    Par défaut
    il me semble que l'exercice propose de definir, en C++, une classe string qui agirai comme une interface pour manipuler les char* de C. Je consois que corriger pointer mes erreur peux vous rebuter mais simplement me dire ce qui ne va pas dans:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    string:string(char* s)
    {
    	val = s;
    	lng = s.length();
    }
    par exemple, plutot qu'un RTFM et peut-etres plus constructif non ?

  6. #6
    screetch
    Invité(e)
    Par défaut
    je n'ai pas dit RTFM, j'ai dit qu'il y a la FAQ et je t'ai donné le mot clé pour regarder dans la FAQ, et je t'ai envoyé vers un forum/cours plus approprié pour la gestion des chaines C.

    ce qui ne va pas (et je me répète) c'est que tu n'as pas compris comment marchent les pointeurs sur les caracteres C.

  7. #7
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    Bonjour

    Il est vrai que l'on ne fait pas les devoirs des étudiants ici. Mais bon, pour une fois que l'on a quelqu'un qui a fait l'exo avant de poster, on peut l'aider un peu quand même

    1. tu écris l'opérateur << de la classe osstream.
    Cette classe est accessible ? Tu peux la modifier pour ajouter un opérateur dedans ? Ton opérateur fonctionne pour cerr ? Ton opérateur va appeler en interne l'opérateur << sur cout... donc lui même

    2. as tu testé ton code ? Et comment ? Que fait exactement la ligne val = s; ? Est ce que char* possède une fonction membre length() ?

    3. regarde dans la FAQ les différents types de constructeur et trouve celui qui correspond à cette forme.

    4. ça ne ressemble pas au code d'un opérateur ça. Regarde dans la FAQ pour savoir comment écrire un opérateur. On te demande l'opérateur = (affectation) ou == (égalité) ici ?

    5. c'est un opérateur ou une fonction que tu as écris ? C'est quoi "c" entre "char" et "kiemeLettre" ? Le code s[pos - 1]; appelle quel opérateur de string ?

    6. idem, regarde la FAQ pour connaître la signature de cet opérateur. A quel moment tu alloues la mémoire pour la variable membre val ?

    7. idem pour la signature de l'opérateur.

    En règle général :
    - teste ton code
    - attention aux const
    - suis le conseil de screetch, tu as de gros problème de gestion de la mémoire dynamique (regarde new et delete)

    HS : grrr, toujours cette habitude d'apprendre aux débutant en commençant par les pointeurs...

Discussions similaires

  1. Réponses: 9
    Dernier message: 06/11/2007, 12h36
  2. Réponses: 13
    Dernier message: 13/06/2003, 14h13
  3. Pb Update avec chaine de caractere
    Par JuJu° dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 28/05/2003, 15h58
  4. [LG]comparaison de chaines de caracteres
    Par thesam dans le forum Langage
    Réponses: 6
    Dernier message: 20/05/2003, 22h41
  5. Probleme sur les chaines de caractere
    Par scorpiwolf dans le forum C
    Réponses: 8
    Dernier message: 06/05/2002, 19h01

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