Effacer les espaces

cs_mast Messages postés 24 Date d'inscription dimanche 17 juin 2001 Statut Membre Dernière intervention 3 octobre 2006 - 2 févr. 2006 à 04:39
KeniiyK Messages postés 326 Date d'inscription vendredi 13 août 2004 Statut Membre Dernière intervention 2 novembre 2007 - 2 févr. 2006 à 12:36
Bonsoir !

Je store une chaine de charactère dans un array[]="blah blah" et je voudrais savoir comment en effacer les espaces (ou tout autres caractères). La manière qui me semble la plus simple serait de faire un loop à travers chaque charactère de l'array array[0] à array[n] mais je ne sais pas comme trouver l'id de la dernière position de l'array ni comment effacer si c'est un espace, quelqu'un pourrait me donner un coup de main stp ?

Merci !
- Alex

4 réponses

KeniiyK Messages postés 326 Date d'inscription vendredi 13 août 2004 Statut Membre Dernière intervention 2 novembre 2007 2
2 févr. 2006 à 09:26
taille de la chaine : strlen(array) (ne compte pas le '\0'), donc pour "blah blah" strlen(...)=9.

int compteurEspace=0;
char *result;
char *resultIter;
// on compte le nombre d'espace por l'allocation de la nouvelle chaine
for(int i=0;i<strlen(array);i++)
{
if(array[i]==' ') compteurEspace++;
}

if(compteurEspace==0)
{
result=array;
// là c'est toi qui voit...
}
else
{
// +1 pour le '\0'
result=(char*)malloc(strlen(array)-compteurEspace+1);
resultIter=result;
for(int j=0;j<strlen(array);j++)
{
if(array[j]!=' ')
{
*resultIter=array[j];
resultIter++;
}
}
}

@+, KeniiyK
0
KeniiyK Messages postés 326 Date d'inscription vendredi 13 août 2004 Statut Membre Dernière intervention 2 novembre 2007 2
2 févr. 2006 à 09:28
Et voila, je l'ai oublié
il faut ajouter *resultIter='\0'; en sortie du dernier FOR.

KeniiyK
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
2 févr. 2006 à 10:33
KeniiyK > excuse mais c'est vraiment très mauvais (on dirait du VB), tu parcours la chaine une multitude de fois.

en 1 seul parcours et refaite sur place:
char *c; *d;c d array;
while(*c) { if(*c !32) *d++ *c; // SI != ESPACE
c++;
}
*d = 0; // TERMINE LA CHAINE

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
0
KeniiyK Messages postés 326 Date d'inscription vendredi 13 août 2004 Statut Membre Dernière intervention 2 novembre 2007 2
2 févr. 2006 à 12:36
Je suis d'accord mais je ne sais quel est l'utilisation de la chaine ensuite ou s'il ne faut pas toucher à la première, etc.... On ne sait pas si c'est du C ou CPP.
Bref, j'ai donné ce code vite fait pour lui trouvé une solution.

Maintenant à lui de prendre celle qui lui convient le mieux.
0
Rejoignez-nous