Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1843 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Suppression espaces en plus

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Suppression espaces en plus

n°1894732
Nethacker
rule televisions, rule minds
Posté le 13-06-2009 à 12:53:20  profilanswer
 

Bonjour,
voila un code que j'ai trouvé mais dont je ne comprend pas trop la manière dont il s'exécute :
 

Code :
  1. void DelSpace(char *source, char *dest)
  2. {
  3. char i,flag=1,p=0;
  4. for  (i=0 ; i < strlen(source); i++) {
  5.  if (source[i] != ' ' && source[i] != '\t') flag = 0;
  6.  if (flag == 0) { dest[p] = source[i]; p++; }
  7.  if (source[i] == ' ' || source[i] == '\t') flag = 1;
  8.  }
  9. dest[p]='\0';
  10. }


 
Je l'ai amélioré un peu ... le problème c'est que ce n'est pas clair qu'il va laisser maximum un seul espace, on a l'impression qu'il va supprimer tous les espaces, j'ai reécrit le code sous cette forme, pensant que ça ferait la même chose :

Code :
  1. for  (i=0 ; i < strlen(source); i++)
  2. {
  3. if (source[i] != ' ' && source[i] != '\t')
  4. { dest[p] = source[i]; p++; }
  5. }


Mais ce n'était pas ça, le mien supprimait tous les espaces, pourriez vous m'aider à mieux comprendre ce bout de code ? j'ai beau essayé de faire des shémas sur papier, mais le résultat que j'attendais était celui de mon deuxième code.
Merci d'avance !

mood
Publicité
Posté le 13-06-2009 à 12:53:20  profilanswer
 

n°1894752
Emmanuel D​elahaye
C is a sharp tool
Posté le 13-06-2009 à 14:13:07  profilanswer
 

Nethacker a écrit :

Mais ce n'était pas ça, le mien supprimait tous les espaces, pourriez vous m'aider à mieux comprendre ce bout de code ? j'ai beau essayé de faire des shémas sur papier, mais le résultat que j'attendais était celui de mon deuxième code.


N'essaye pas de copier le code des autres. Essaye plutôt d'écrire le tien...

 

Tu cherches à supprimer les espaces (' ') ou les 'blancs' (' ', '\t', '\n', '\r' etc.)

 

Pour les espaces :


len := strlen(chaine)
j := 0
FOR i = 0 TO len - 1 STEP 1
  IF chaine[i] <> ' '
     chaine[j] := chaine[i]
     INC j
  ENDIF
NEXT i
chaine[j] := 0


Je te laisse coder ça en C.


Message édité par Emmanuel Delahaye le 13-06-2009 à 14:14:48

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1894764
swilmet
Posté le 13-06-2009 à 16:53:18  profilanswer
 

Sinon pour comprendre un code obscure de quelqu'un d'autre, rien de tel qu'un déboggeur (GDB par exemple), même s'il n'y a rien à débugger ;) C'est beaucoup plus pratique que de rajouter plein de printf dans le code, ou d'essayer de comprendre par écrit.

n°1894767
ngkreator
Posté le 13-06-2009 à 18:09:21  profilanswer
 

Ya aussi le debbuger "brain" très utilisé aussi.

n°1894805
Nethacker
rule televisions, rule minds
Posté le 13-06-2009 à 21:35:28  profilanswer
 

gdb, oui mais je connais pas trop les commandes, je devrais m'y mettre à fond, et oui souvent j'ajoute des printf pour voir où ce qu'il en est ...
 
pour ce qui est du code, vous avez bien raison, je ne dois pas voir le code des autres, mais j'ai bien essayer, mais ça n'a aboutit à rien, un deuxième indice était indispensable biensur, sinon je voulais supprimer les espaces et les tabulations seulement,et merci pour ton code, je connais le Delphi(Pascal) plus que le C ...

n°1894807
Trap D
Posté le 13-06-2009 à 21:56:05  profilanswer
 

Nethacker a écrit :

pour ce qui est du code, vous avez bien raison, je ne dois pas voir le code des autres, mais j'ai bien essayer, mais ça n'a aboutit à rien, un deuxième indice était indispensable biensur, sinon je voulais supprimer les espaces et les tabulations seulement,et merci pour ton code, je connais le Delphi(Pascal) plus que le C ...

Voilà ce que tu peux faire pour ne garder qu'un seul espace s'il y a une suite d'espaces:
etat est l'état de l'automate
0 : on n'a pas lu d'espace ==> on écrit le caractère courant
1 : on a lu un espace ==>  on n'en écrit pas d'autres
 
La fonction espace(caractère) renvoie 1 si l'argument est un espace, 0 sinon

Code :
  1. len <- longueur(chaine)
  2. j <- 0
  3. etat <- 1  // permet de ne pas écrire les espaces en début de chaine
  4. Pour i de 0 à len - 1 par pas de 1 faire
  5.   c <- espace(chaine[i])
  6.   si c = 0 alors
  7.     etat <- 0
  8.     chaine[j] <- chaine[i]
  9.     j <- j+1
  10.   sinon
  11.   si  etat = 0 alors
  12.     // ici on vient de lire le premier espace, on l'écrit  
  13.     // mais on mémorise le fait qu'on en a déjà écrit 1
  14.     chaine[j] := chaine[i]
  15.     j <- j+1
  16.     etat <- 1
  17.   fin si
  18. suivant i
  19. chaine[j] := 0


 
Une manière plus courte d'écrire ce code est

Code :
  1. len <- longueur(chaine)
  2. j <- 0
  3. etat <- 1  //permet de ne pas écrire les espaces en début de chaine)
  4. Pour i de 0 à len - 1 par pas de 1 faire
  5.   c <- espace(chaine[i])
  6.   // si le caractère courant n'est pas un espace
  7.   // ou si c'est le premier espace qu'on écrit
  8.   si c = 0  ou etat = 0 alors
  9.     chaine[j] <- chaine[i]
  10.     j <- j+1
  11.   fin si
  12.   // le nouvel etat correspond au caractère lu
  13.   etat <- c
  14. suivant i
  15. chaine[j] := 0



Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Suppression espaces en plus

 

Sujets relatifs
VBA et excel : suppression de lignes correspondantesSuppression auto des commentaires C/C++
Probléme de suppression enregistrement + BDAutoriser espaces ds un formulaire seulement dans noms à particules
suppression dans un array (tableau) [modifié]Suppression multitables
fputcsv PHP5 (gerer les espaces, les apostrophes etc...)[C# + Access] Ajout, suppression et modifications des données
Ajout/Suppression de ligne pour une base ACCESSSuppression de ligne dans Excel
Plus de sujets relatifs à : Suppression espaces en plus


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)