Partage
  • Partager sur Facebook
  • Partager sur Twitter

Inverser chaine de maniere recursive

Sujet résolu
6 septembre 2010 à 20:38:18

Salut à tous les zéros :p ,

bon voila j'ai un problème, je n'arrive pas à inverser de manière récursive une chaine.. Je sais je suis un débutant :( .
voici mon code :
#include <iostream>
#include <conio.h>
#include <iomanip>
#include <string>
#include <time.h>
#include <windows.h>

using namespace std;

string IverseChain( string Ch);
    
  void main(void){
   string Ch,ChainInverse;

	  cout<<"Entrer une phrase"<<endl;
	  cin>>Ch;
	ChainInverse=IverseChain(Ch);
	 cout<<ChainInverse;
	_getch();

}// fin du main 

  string IverseChain(string Ch){
	 int i =1 ; string Resultat;

		 if (i > Ch.length())
			 return Resultat;   
		 else 
			 Resultat+=  IverseChain(Ch[(Ch.length()-1)]);
  
		   
  }


voila en attente de votre aide.
  • Partager sur Facebook
  • Partager sur Twitter
6 septembre 2010 à 20:44:51

Il existe déjà une méthode, rbegin qui inverse les caractères de la chaine.

Voir les exemples pour comprendre.
  • Partager sur Facebook
  • Partager sur Twitter
🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles  - ♡ Copying is an act of love.
6 septembre 2010 à 20:56:33

Salut,

Pour inverser une chaine, tu peux t'y prendre de la manière suivante :
  • tu inverses le premier et le dernier caractère de la chaine
  • et tu rappelles ta fonction pour inverser le reste de la chaine


Ce qui donne :
string retourne(string str,int debut,int fin){
    if(debut<fin){
        char tmp=str[debut];//inversion du premier et du dernier caractère
        str[debut]=str[fin];
        str[fin]=tmp;
        return retourne(str,debut+1,fin-1);
    }else{//si la variable debut est plus grande que la variable fin, c'est qu'on a renversé toute la chaine
        return str;
    }
}


Si tu as des questions n'hésite pas
Bonne chance
  • Partager sur Facebook
  • Partager sur Twitter
6 septembre 2010 à 21:11:35

Merci pour vos réponses :D

Citation : alcinos

Salut,

Pour inverser une chaine, tu peux t'y prendre de la manière suivante :

  • tu inverses le premier et le dernier caractère de la chaine
  • et tu rappelles ta fonction pour inverser le reste de la chaine



Ce qui donne :

string retourne(string str,int debut,int fin){
    if(debut<fin){
        char tmp=str[debut];//inversion du premier et du dernier caractère
        str[debut]=str[fin];
        str[fin]=tmp;
        return retourne(str,debut+1,fin-1);
    }else{//si la variable debut est plus grande que la variable fin, c'est qu'on a renversé toute la chaine
        return str;
    }
}



Si tu as des questions n'hésite pas
Bonne chance



les variables debut et fin tu les initialise comment ?
Debut=0 et fin= str.length()? le return dans la condition if est -til nécessaire ou peut juste appeler la fonction 'retourne' sans l'utiliser.
  • Partager sur Facebook
  • Partager sur Twitter
6 septembre 2010 à 21:54:41

debut=0 et fin=str.length()-1 (tu remarques que j'accède à str[fin], donc si fin=str.length() on risque d'avoir quelques soucis...)

Pour le return il est bien nécessaire il te permet de renvoyer une chaine "mieux retournée" (grâce à un appel supplémentaire à retourne())
Si tu as des problèmes avec la récursivité je te conseille de (re)lire le tuto sur ce site à ce sujet

Bonne chance
  • Partager sur Facebook
  • Partager sur Twitter
6 septembre 2010 à 22:17:35

@ alcinos
On peut très bien faire avec seulement un paramètre(optionnel en plus).

#include <iostream>
#include <conio.h>
#include <iomanip>
#include <string>
#include <time.h>
#include <windows.h>

using namespace std;

string IverseChain( string Ch,int I = 0);

  int main(void){
   string Ch,ChainInverse;

	  cout<<"Entrer une phrase"<<endl;
	  cin>>Ch;
	ChainInverse=IverseChain(Ch);
	 cout<<ChainInverse;
	_getch();

}// fin du main

  string IverseChain(string Ch,int I)
{
      if(I < Ch.length()/2)
        {
            char ch = Ch[I];
            Ch[I] = Ch[Ch.length()-1 - I];
            Ch[Ch.length()-1 - I] = ch;
            return IverseChain(Ch,++I);
        }
    else
        return Ch;
}


Ca marche pas avec "RADAR" :lol: .
  • Partager sur Facebook
  • Partager sur Twitter
🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles  - ♡ Copying is an act of love.
6 septembre 2010 à 22:35:11

Le plus simple que je connaisse :
string i(string c){
        if(c.length()==1){
                return c;
        }
        return i(c.substr(1,c.length()-1))+c[0];
}
  • Partager sur Facebook
  • Partager sur Twitter
6 septembre 2010 à 22:53:46

Merci beaucoup a tous pour votre aide, c'est très apprécié :D
  • Partager sur Facebook
  • Partager sur Twitter
31 mars 2015 à 20:48:05

je veux l'inversation du chain de caractére en pascal 

  • Partager sur Facebook
  • Partager sur Twitter
31 mars 2015 à 20:55:16

Moi je veux trouver l'amour.
  • Partager sur Facebook
  • Partager sur Twitter
Nazara Engine | Discord NaN ! (Chat dédié à la programmation) | Ma chaîne Twitch (développement)
31 mars 2015 à 21:49:49

Lynix a écrit:

Moi je veux trouver l'amour.

Ça ça vient du cœur ! Préviens moi quand tu trouves !

Et sinon pourquoi l'OP a pas fait juste ça :

std::string str{"Bonjour"};
std::string reverse{str.rbegin(), str.rend()};

?

  • Partager sur Facebook
  • Partager sur Twitter
La flemme vaincra.
31 mars 2015 à 21:56:41

J'espère franchement qu'en quatre années il est passé à autre chose.
  • Partager sur Facebook
  • Partager sur Twitter
Nazara Engine | Discord NaN ! (Chat dédié à la programmation) | Ma chaîne Twitch (développement)
31 mars 2015 à 21:59:17

Oups, vu que le dernier message datait pas j'avais pas fait gaffe :/
  • Partager sur Facebook
  • Partager sur Twitter
La flemme vaincra.
18 novembre 2021 à 12:26:00 - Message modéré pour le motif suivant : Prolongement de déterrage, utilisateur du message précédent supprimé


Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
18 novembre 2021 à 12:28:50

Bonjour,

Déterrage

Citation des règles générales du forum :

Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.

Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre.
En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.

Au lieu de déterrer un sujet il est préférable :

  • soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
  • soit de créer un nouveau sujet décrivant votre propre contexte
  • ne pas répondre à un déterrage et le signaler à la modération

Je ferme ce sujet. En cas de désaccord, me contacter par MP.

  • Partager sur Facebook
  • Partager sur Twitter
Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL