Fonction de suppression des espaces en C

Fermé
Mel - 15 janv. 2004 à 11:01
 outbreak - 16 févr. 2010 à 13:47
Bonjour,
J'ai créé une fonction C qui permet de supprimer les espaces d'une chaine de caractères mais elle ne fonctionne pas correctement. Pourquoi ???? Merci de votre aide
void suppSpace(char * ligneSpace){
     char ligne[80];
     int nb;
     int i=0;
     int j=0;
     nb=strlen(ligneSpace);
     for(i;i<nb;i++)
          {
             if((ligneSpace[i]!=' ') || (ligneSpace[i]!='\n'))
                {ligne[j]=ligneSpace[i];
                j=j+1;}
          }
     strncpy(ligneSpace,ligne,80);}
A voir également:

4 réponses

Marden Messages postés 1072 Date d'inscription dimanche 11 février 2001 Statut Membre Dernière intervention 29 janvier 2006 210
15 janv. 2004 à 11:47
Vrai pour la limite ( i <= nb, ce qui permet de transférer le "\0" terminal ) et l'opérateur logique ( && ), mais évidemment pas pour l'indice ( j ) à conserver.
L'utilisation du tableau intermédiaire ( ligne ) est inutile, on peut utiliser directement le tableau d'entrée et supprimer l'appel à strnCopy(), en codant :
ligneSpace[j++]=ligneSpace[i];

Nota : la fonction strLen() recherche (et s'arrête sur) le premier caractère "\0" de la chaîne.
1
slt, ca résoudra peut etre pas ton pb, mais je pense que tu peux améliorer 2-3 trucs

dans ton for mets i inférieur ou égal à nb
vire la variable j de la fonction et mets i à la place dans ton code puisque que les 2 var varient à l'identique

et surtout dans la condition, j'aurais mis un "et" et pas "ou"... a mon avis c ca qui est mauvais mais je me plante peut etre.

++
0
j'ai oublié de préciser aussi qu'il faut initialiser ligne, sinon ca va t'afficher n'importe quoi...
0
voiçi un ti programme en c qu j'ai realisé qui va supprimer les aspaces d'une chaine.faire le transformer dans ta fonction.gd luck

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{int j,i,n,k=0;
char *p;
p=malloc(100*sizeof(char));
puts("entrer une phrase \a au maximum comport 100 carracters \a");
gets(p);
n=strlen(p);
for(i=0;i<n;i++)
{if(p[i]==' ')
{for(j=i;j<n;j++)
{p[j]=p[j+1];}}}
printf("%s\n",p);
system("PAUSE");
return 0;
}
0