Supprimer les espaces dans une chaine de caractères [Résolu]

Signaler
Messages postés
8
Date d'inscription
mercredi 18 février 2009
Statut
Membre
Dernière intervention
20 mars 2009
-
Messages postés
8
Date d'inscription
mercredi 18 février 2009
Statut
Membre
Dernière intervention
20 mars 2009
-
Salut,
Je débute en programmation C et j'utilise Borland C++ comme compilateur.
je voudrais créer un programme C permettant de supprimer les espaces contenus dans une chaine de caractères :
voici mon code :
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void suprEspace(char expr);
void main()
{char expr[255];
 printf("Donnez l'expression : ");
 gets(expr);
 suprEspace(expr);
 puts(expr);
}

void suprEspace(char expr)
{int i,j,n;
n=strlen(*expr);
for (i=0;i>n;i++)
  if (*expr[i]==' ')
                   {
                    for(j=i;j>(n-1);j++)
                     *expr[j]=*expr[j+1];
                   }
}


lors de la compilation borland m'affiche que j'ai 7 erreurs qui sont surement dus a une mauvaises manipulation des pointeurs et des chaines de caractères alors si quelqu'un peut me proposer une solution ça serai vraiment très cool
merci d'avance

5 réponses

Messages postés
1054
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
6
Salut
Effectivement les pointeurs sont à revoir.

void suprEspace(char *expr, char *res)
{
  char *P=expr,*Q=res;
  while(*P!='\0'){
    if(*P!=' '){
      *Q=*P;
      Q++;
    }
    P++;
  }
  *Q=0;
}


A+
____________________________________________________________________________
Mon site internet :  
Messages postés
1107
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
10 juillet 2018
4
Salut,

La petite erreur du débutant avec les pointeurs !!
void suprEspace(char expr); // là tu passes 1 caractère
void suprEspace(char *expr); // là tu passes l'adresse d'un tableau de caractères (version correcte)

char expr[255]; // expr est l'adresse du 1er element de ton tableau

suprEspace(expr); // est correcte
Messages postés
8
Date d'inscription
mercredi 18 février 2009
Statut
Membre
Dernière intervention
20 mars 2009

Salut merci pour vos réponses
voici mon code après modifications:
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void suprEspace(char *expr);
void main()
{char expr[255];
 printf("Donnez l'expression : ");
 gets(expr);
 suprEspace(expr);
 puts(expr);
 getch();
}

void suprEspace(char *expr)
{int i,j,n;
n=strlen(expr);
for (i=0;i<n;i++)
  if (expr[i]==' ')
                   {
                    for(j=i;j<(n-1);j++)
                     expr[j]=expr[j+1];
                   }
}

 la compilation n'affiche aucune erreur mais il existe encore un problème : les expaces sont bien supprimés mais le nombre d'espaces introduits est remplacé a la fin de la chaine de caractères avec des valeurs aléatoires
c'est à dire:
si par exemple j'entre la chaine "code source"
le programme me retourne "codesourcee" le dernier 'e' est la valeur aléatoire dont je vous ai parlé.
Messages postés
1054
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
6
Il faut faire attention au zéro terminal. Tu le places ou tu veux et il symbolise la fin de chaine.
A+

____________________________________________________________________________
Mon site internet :  
Messages postés
8
Date d'inscription
mercredi 18 février 2009
Statut
Membre
Dernière intervention
20 mars 2009

En effet dans la derniere boucle de la fonction suprEspaces il fallait mettre (j=i;j<n;j++) et non (j=i;j<(n-1);j++)
sinon le zéro terminal ne subira pas de décalage d'ou l'apparition des valeures aléatoires.
Encore merci.