Inverser une chaîne de caractères langage c+

Signaler
Messages postés
1
Date d'inscription
vendredi 10 février 2012
Statut
Membre
Dernière intervention
10 février 2012
-
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
-
bonjour a tous;
Comment faire pour inverser une chaîne de caractères dans Dev-c++ ,(c'est à dire si chaîne=jeudi alors chaîne <= iduej) j'ai essayé avec deux fonctions comme ça :
le programme:
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<stdlib.h>
char*strinv(char*ch)
{
char*inv=(char*)malloc(strlen(ch));
int i=0;
inv j=strlen(ch)-1;
do
{
int[j]=ch[i];
i++;
j--;
}while(i<j)
return(inv);
}
main()
{
int i,j;
getch();
}
Ma question est :" Existe-t-il une seule fonction (moi j'ai utilisé deux fonctions "char*strinv(char*ch) " et "char*inv=(char*)malloc(strlen(ch))" ) toute faite permettant d'inverser une chaine de caractères en C++ "???
Merci d'avance.

5 réponses

Messages postés
14958
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
26 mai 2020
91
Hello,
Il n'y a pas de fonction toute faite avec C++. Il faut:
- allouer la chaine de destination
- parcourir la chaine source à l'envers
- remplir la chaine destination.


@+
Buno, Admin CS
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
62
Sympa, le jaune sur fond blanc...

rien de tout fait, non, comme l'indique buno

pense par contre bien à libérer (l'espace mémoire alloué.)

tu as aussi la possibilité d'inverser la chaine sur place, remplacant la chaine de départ...


gaffe, tu as tapé int et non inv :
int[j] = ...

char*strinv(char*ch) { 
    int i; 
    int j=strlen(c); 
    if (j>0) {
        char*inv=(char*)malloc(j); 
        while(j--) 
            inv[j]=ch[i++]; 
        return inv;
    }
    return NULL; 
} 


Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
Messages postés
653
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
10 novembre 2014
2
Sans alloc:

VOID ReverseString(LPSTR lpsz)
{
LPSTR lpe;

lpe = lpsz;
while (*lpe)
lpe++;
while (--lpe > lpsz)
{
*lpsz ^= *lpe;
*lpe ^= *lpsz;
*lpsz ^= *lpe;
lpsz++;
}
}



Neo_Fr
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
18
Salut,

tu inclus <stdio.h>, alors pourquoi ne pas utiliser la fonction C suivante ?

char *_strrev(
   char *str 
);
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
18
avec un exemple c'est mieux :

char* string = "une chaine";
_strrev( _strdup( string ) );