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 :

simple récursivité inverser les caractères


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 29
    Points : 19
    Points
    19
    Par défaut simple récursivité inverser les caractères
    Bonsoir !

    Je... Débute en c++, mais j'avais envie d'adapter un script très simple de Python vers c++, et me voilà totalement coincée par des questions de noob, sans doute. J'ai cherché sur Internet et réglé quelques soucis, mais je pense que j'aurais bien besoin d'un coup de main pour m'aiguiller vers une solution (pas me la donner dans la main )

    Voilà, je voudrais simplement écrire une fonction qui affiche une liste d'entiers à l'envers. (j'entre 1,2,3,4,5 et je lis 5,4,3,2,1... Si jamais j'y arrive, a,b,c,d,e donnerait e,d,c,b,a...)
    Dit comme ça, ça a l'air tout simple, en Python je fais ça en 30 secondes.

    Oui mais d'une part, y a le problème des cast. (j'ai une fonction qui me fournit une chaîne de caractère en sortie pour un entier d'entré, mais je n'en suis pas vraiment satisfaite, parce qu'elle appelle une librairie, #include <sstream>, d'une part et que je pense que ça doit être possible autrement, sans caster...)

    Parce qu'en fait, en Python, je peux faire quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #cas de base
    if len(alist)==1: 
      return alist[0]
    else:
      return alist[0] + maFunction(alist[1:])
    Mais je ne peux pas concaténer de cette façon en c++, en tout cas mon compilateur n'aime pas du tout du tout.

    J'avais éventuellement pensé faire un "for" mais alors y a plus de récursivité, et ce n'est pas ce que je veux faire.
    J'ai aussi pensé envoyer un vecteur de char à remplir pour la chaîne de résultat, m'enfin j'ai toujours le même type d'erreurs.
    J'aimerais pouvoir comprendre ça, et pour "renvoyer" une chaine de caractères, et pour "écrire", sans renvoyer de return...

    :s
    Siouplaît ?!... Pour m'aiguiller un peu ?!

    Merci d'avance

    edith : je précise que je sais que la récursivité n'est pas la meilleure idée, c'est dans le cadre d'un "exercice" hein, un exercice que je fais de moi pour moi, pour pratiquer

  2. #2
    Expert confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Points : 4 442
    Points
    4 442
    Par défaut
    Hello,

    Il est possible de faire quelque chose qui y ressemble en C++ avec des itérateurs :
    Au lieu de vérifier la taille, on vérifie si l'itérateur est valide
    et au lieu de créer un nouveau conteneur sans le premier élément (ou peut être que ce n'est qu'une vue sur ce conteneur, je connais pas python, mais le principe est le même), on incrémente l'itérateur pour passer à l'élément suivant.

    Il faut cependant faire gaffe à la durée de vie des objets, en particulier dans des fonctions récursives.
    Un peu de doc qui devrait te mettre sur la voie
    begin()
    rbegin()
    end()
    rend()

  3. #3
    Membre habitué Avatar de robinsondesbois
    Homme Profil pro
    Etudiant
    Inscrit en
    Avril 2012
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 171
    Points : 173
    Points
    173
    Par défaut
    J'avais un peut les mêmes question avec prolog.

    Tu stock dans un tableau tes valeurs d'entré sous le type char.
    Tu peut écrire une fonction récursive qui parcours ton tableau et quand tu est à la fin tu dépile en affichant.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    tableau[] = a,r,6,7,4,4,2,t,r;
    tableau[0]
        tableau[1]
            tableau[2]
                tableau[3]
                    ...
                affichage tableau[3]
            affichage tableau[2]
        affichage tableau[3]
    affichage tableau[4]

  4. #4
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Pour gérer ta liste, je te conseille l'empli de la classe std::vector (ou string pour une liste de char). Seul petite différence : vector est plus fait pour ajouter/enlever des éléments à la fin.
    Si tu stockes tes entier/chars dans un vector v, l'équivalent de alist[0] serait v[0] (ou v.back() pour accéder au dernier élément), et s'il n'y a pas d'équivalent direct à alist[1:], si tu fais v.pop_back(), tu modifies le vecteur courant en lui enlevant le dernier élément.

    À partir de là, tu devrais pouvoir te débrouiller.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Pour feinter le alist[1:], tu n'as pas besoin de créer une copie de la liste
    Suffit que la fonction prenne en paramètre un itérateur de début et de fin
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

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

Discussions similaires

  1. [C#][ADO] Enlever les caractère spéciaux
    Par Oberown dans le forum Windows Forms
    Réponses: 3
    Dernier message: 10/01/2005, 18h38
  2. [Jsp] Supprimer les caractère spéciaux d'une chaine
    Par PeteMitchell dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 13/05/2004, 11h11
  3. Réponses: 7
    Dernier message: 12/05/2003, 22h50
  4. Traiter les caractères spéciaux
    Par ricola dans le forum Langage
    Réponses: 2
    Dernier message: 20/02/2003, 09h23
  5. [PostgreSQL] Les caractères accentués ?
    Par yacomor dans le forum Requêtes
    Réponses: 2
    Dernier message: 18/02/2003, 16h30

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