Fonction inverse c++

bretdu55 Messages postés 14 Date d'inscription vendredi 22 février 2008 Statut Membre Dernière intervention 30 novembre 2011 - 4 nov. 2009 à 15:16
bretdu55 Messages postés 14 Date d'inscription vendredi 22 février 2008 Statut Membre Dernière intervention 30 novembre 2011 - 6 nov. 2009 à 19:34
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.
A voir également:

7 réponses

fregolo52 Messages postés 1114 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 6 mai 2021 4
4 nov. 2009 à 15:35
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;
0
bretdu55 Messages postés 14 Date d'inscription vendredi 22 février 2008 Statut Membre Dernière intervention 30 novembre 2011
4 nov. 2009 à 16:00
Merci mais c 'est quoi '.append'
0
bretdu55 Messages postés 14 Date d'inscription vendredi 22 février 2008 Statut Membre Dernière intervention 30 novembre 2011
4 nov. 2009 à 16:11
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
0
fregolo52 Messages postés 1114 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 6 mai 2021 4
5 nov. 2009 à 08:36
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bretdu55 Messages postés 14 Date d'inscription vendredi 22 février 2008 Statut Membre Dernière intervention 30 novembre 2011
5 nov. 2009 à 18:57
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
0
fregolo52 Messages postés 1114 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 6 mai 2021 4
6 nov. 2009 à 08:28
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
0
bretdu55 Messages postés 14 Date d'inscription vendredi 22 février 2008 Statut Membre Dernière intervention 30 novembre 2011
6 nov. 2009 à 19:34
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
0
Rejoignez-nous