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

marthymbiz 8 Messages postés mercredi 18 février 2009Date d'inscription 20 mars 2009 Dernière intervention - 16 mars 2009 à 16:00 - Dernière réponse : marthymbiz 8 Messages postés mercredi 18 février 2009Date d'inscription 20 mars 2009 Dernière intervention
- 16 mars 2009 à 22:13
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
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
fregolo52 1108 Messages postés mercredi 15 juin 2011Date d'inscription 10 juillet 2018 Dernière intervention - 16 mars 2009 à 16:50
3
Merci
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

Merci fregolo52 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 95 internautes ce mois-ci

Commenter la réponse de fregolo52
Meilleure réponse
marthymbiz 8 Messages postés mercredi 18 février 2009Date d'inscription 20 mars 2009 Dernière intervention - 16 mars 2009 à 22:13
3
Merci
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.

Merci marthymbiz 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 95 internautes ce mois-ci

Commenter la réponse de marthymbiz
Pistol_Pete 1055 Messages postés samedi 2 octobre 2004Date d'inscription 9 juillet 2013 Dernière intervention - 16 mars 2009 à 16:46
1
Merci
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 :  
Commenter la réponse de Pistol_Pete
marthymbiz 8 Messages postés mercredi 18 février 2009Date d'inscription 20 mars 2009 Dernière intervention - 16 mars 2009 à 19:03
0
Merci
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é.
Commenter la réponse de marthymbiz
Pistol_Pete 1055 Messages postés samedi 2 octobre 2004Date d'inscription 9 juillet 2013 Dernière intervention - 16 mars 2009 à 19:12
0
Merci
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 :  
Commenter la réponse de Pistol_Pete

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.