Fonction de suppression des espaces en C

Mel -  
 outbreak -
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);}

4 réponses

  1. Marden Messages postés 1075 Statut Membre 210
     
    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
  2. xt@z
     
    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
  3. xt@z
     
    j'ai oublié de préciser aussi qu'il faut initialiser ligne, sinon ca va t'afficher n'importe quoi...
    0
  4. outbreak
     
    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