Fonction inverse c++

Signaler
Messages postés
14
Date d'inscription
vendredi 22 février 2008
Statut
Membre
Dernière intervention
30 novembre 2011
-
bretdu55
Messages postés
14
Date d'inscription
vendredi 22 février 2008
Statut
Membre
Dernière intervention
30 novembre 2011
-
Bonjour,
J'ai plusieurs exos en c++ à faire et le problème est que je n'arrive pas à faire une fonction inverse pour inverser l'affichage d'un mot.
Il faut que j'arrive à inverser une chaine avec l'indice 'i' en lui donnant comme valeur i=i-1.
Pour cela, j'ai le droit à deux fonctions
- int longueurDeMaChaine=maChaine.length();
- string unExtrait=maChaine.substr(x,x);
Le résultat doit être du style: jambon-->nobmaj

voici mon programme si vous pourriez m'aider à le compléter:

#include
#include<string>

using namespace std;

int inverse(string);

int main()
{
string laChaine;
cout<<"Saisir un mot: ";
cin>>laChaine;

inverse(laChaine);


system("pause");
return 0;
}



int inverse(string laChaine)
{
string unExtrait;
int longChaine;
inverse(laChaine)=" ";
longChaine = laChaine.length();


for (int i=0; i<longChaine; i++)
{

unExtrait = laChaine.substr(i,1);
inverse(laChaine)=inverse(laChaine)+unExtrait;


}

cout<<unExtrait;
}






MERCI.

7 réponses

Messages postés
1107
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
10 juillet 2018
4
inverse(laChaine)=inverse(laChaine)+unExtrait; c'est quoi ça !!!

La boucle for, tu devrais faire exactement l'inverse. Il faut partir de la fin :
for (int i=longChaine; i<0; i--)
Et ca devient plus simple

Ca doit faire un truc du style
string chaineinversee;
for (int i=longChaine; i<0; i--) 
{
  chaineinversee.append(laChaine.substr(i,1)); 
}
cout << chaineinversee;
Messages postés
14
Date d'inscription
vendredi 22 février 2008
Statut
Membre
Dernière intervention
30 novembre 2011

Merci mais c 'est quoi '.append'
Messages postés
14
Date d'inscription
vendredi 22 février 2008
Statut
Membre
Dernière intervention
30 novembre 2011

J'ai corrigé un exo avec mon prf pour faire un palindrome et l'algo est le suivant:

programme palindrome
chaine:maChaine
debut
afficher"saisir mot"
saisir maChaine
si inverse(maChaine)=maChaine
afficher "OUI"
sinon
afficher "NON"
finsi
fin




fonction inverse(laChaine:chaine):chaine
chaineInverse<--""
debut
pour i de longueur(laChaine)à 1 pas de -1
chaineInverse<--chaineInverse & extrait(laChaine,i,1)
finpour
fin





Je doit convertir sa en c++ mais le problème est que je n'arrive pas à faire ma fonction inverse, pourrai-tu me traduire sa en c++ avec les 2 seules fonctions extrait et longueur?

MERCI
Messages postés
1107
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
10 juillet 2018
4
Bah c'est ce que je t'ai donné comme exemple.

append ajoute une chaine à une chaine. un peu l'équivalent de strcat en C.
Si append ne marche pas, mais j'en doute, concatène à la main, style
chaineinversee = chaineinversee + laChaine.substr(i,1);

c'est clair dans mon exemple y'a un souci de typage entre string et char*.

j'ai pas testé mais je vois pas pourquoi mon 1er exemple ne marcherait pas.

Essaie d'avancer, et remets ton nouveau code que tu auras intégré la nouvelle fonction inverse.
Messages postés
14
Date d'inscription
vendredi 22 février 2008
Statut
Membre
Dernière intervention
30 novembre 2011

Merci beaucoup, je viens de trouver:

#include
#include<string>

using namespace std;

int inverse(string);

int main()
{
string laChaine,mot;
cout<<"Saisir un mot: ";
cin>>laChaine;

inverse(laChaine);

system("pause");
return 0;
}



int inverse(string laChaine)
{
string chaineinversee,chaineinv,extrait;
int longChaine,i;

longChaine=laChaine.length();
chaineinversee="";

for (int i=longChaine; i>=0; i--)
{
extrait = laChaine.substr(i,1);
chaineinversee = chaineinv + extrait;
cout << chaineinversee;
}

}







J'ai un autre prog à faire toujours avec les deux fonctions la. L'utilisateur saisi une phrase et les espaces sont remplacés par des '_'. A chaque fois que l'extrait rencontre un '_', il fait un retour à la ligne,
ex: bonjour_le_monde affichera

bonjour
le
monde
Messages postés
1107
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
10 juillet 2018
4
bah là !! c'est super facile. Utilise les méthodes de la classe string.
Là c'est compare.
il suffit d'ajouter à ton code
if (extrait.compare(" ") 0 || extrait.compare("_")0)
  extrait = "\n"; // a tester


PS : je vois pas pourquoi chaineinversee.append(extrait); ne marcherait pas
Messages postés
14
Date d'inscription
vendredi 22 février 2008
Statut
Membre
Dernière intervention
30 novembre 2011

J'ai un palindrome à faire, et j'arrive à cesi, cependant, le programme cesse à chasue fois de fonctionner et je n'arrive pas à afficher vrai ou faux.

#include
#include<string>

using namespace std;

string inverse(string);

int main()
{
string laChaine;
string chaineinversee;
cout<<"Saisir un mot: ";
cin>>laChaine;

inverse(laChaine);

return inverse(laChaine);



if ( inverse(laChaine) == laChaine)
{
return true;
}
else
{
return false;
}


system("pause");
return 0;

}



string inverse(string laChaine)
{
string chaineinversee,chaineinv,extrait;
int longChaine,i;

longChaine=laChaine.length();
chaineinversee="";

for (int i=longChaine; i>=0; i--)
{
extrait = laChaine.substr(i,1);
chaineinversee = chaineinv + extrait;
}
}


Si quelqu'un aurai une tite idée, mon prof ma dit de retourner la chaine inverse et de comparer, mais je patoge un peut