Combler les blancs

berry007 Messages postés 3 Date d'inscription lundi 29 janvier 2007 Statut Membre Dernière intervention 30 janvier 2007 - 29 janv. 2007 à 11:27
berry007 Messages postés 3 Date d'inscription lundi 29 janvier 2007 Statut Membre Dernière intervention 30 janvier 2007 - 30 janv. 2007 à 08:43
bonjour tous le monde, dans le cadre de mon programme scolaire on me demande de remplacer les espaces dans une chaines de caractéres par un caractéres speciaux, je peux supprimer les espaces, mais en vue de la decompression il m'est necessaire de remplacer ces espaces par un caractére spéciale, quelqu'un a t'il une solution ? mon progrmme marche pour la compression (  crée sous Borland 4.5 ).
Merci d'avance

/*************************************************
* NOM :                COMPRESS3.cpp
* TYPE :                 application
* SUJET :               Supprime les blanc
* AUTEUR :          LUDO
* VERSION :         V1.5
* DATE CREATION :
* DERNIERE MODIF :
* ACCES SOURCES :
*************************************************/


#include<stdlib.h>
#include<stdio.h>
#include<ctype.h>
#include<string.h>
#include <conio.h>


 




void SupprimeLesEspaceDeFin(char * s)          //Supprime les espace de fin de chaine
 {


 unsigned short i;
 for(i=strlen(s)-1;isspace(s[i]);--i);     //Stockage dans i de la longueur de chaine   //isspace teste si le caractère est un caractère blanc,
 s[i+1]='\0';


 }


  void SupprimeToutLesEspace(char * s)      //Supprime les blanc entre les mots
 {
   SupprimeLesEspaceDeFin(s);
   unsigned int i,compteur;
   for(i=0;i<strlen(s);++i)


 {
  if(isspace(s[i]))




 {
   for(compteur=i;compteur<strlen(s);++compteur)                          //compteur de blanc
   s[compteur]=s[compteur+1];


 //printf("ici il y a un blanc=%u\n",i);
  }
 }
}

int main()
{
char s[]="bonjour je supprime les blanc";
SupprimeToutLesEspace(s);
printf("Resultat =%s\n",s);

getch();
}

dans le doute reboot

8 réponses

acx01b Messages postés 280 Date d'inscription dimanche 7 septembre 2003 Statut Membre Dernière intervention 8 juillet 2014 6
29 janv. 2007 à 13:01
salut on a pas compris ton problème car tu parles de décompression, quel est ton but ?

et sinon il y a une erreur dans la fonction SupprimeLesEspaceDeFin:
imagine la chaine " ";
il faut rajouter un test en plus:
for(i=strlen(s)-1; i > -1 && isspace(s[i]);--i);
0
berry007 Messages postés 3 Date d'inscription lundi 29 janvier 2007 Statut Membre Dernière intervention 30 janvier 2007
29 janv. 2007 à 13:37
mon probleme se situe tout d'abord dans la compression car je dois remplacer un blanc par un caractére speciale afin que lors de la decompression le nombre associé a se caractére spéciale facilite la remise des blancs en place de la decompression, d'ou la presence d'un compteur.
pour le moment mon programme marche juste pour la compression et je n'est (malheuresement) pas pensé a la decompression...
merci pour l'erreur trouver!!

dans le doute reboot
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
29 janv. 2007 à 15:07
for(i= strlen(s)-1;isspace(s[i]);--i);
Pourquoi -1? Tu saute le dernier caractère.
Ensuite:
isspace(s[i]); et plus loinif(isspace(s[i]))
Pourquoi ne pas faire repectivement s[i] ! = ' ' et s[i] = = ' '
Puis:
for(i=0; i<strlen(s) ;++i) et for(compteur =i;compteur<strlen(s);++compteur)
Tu recalcule la longeur de la chaine à chaque tour de boucle. Ne jamais faire ça surtout si sa longeur ne change jamais. Calcule une fois en début de fonction, stock la valeur dans une variable et réutilise cette variable partout ou c'est nécessaire:
...
int len = strlen(s);
...
for(i=0;i<len;++i)
...
for(compteur=i;compteur<len;++compteur)

C++ (@++)<!--
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
29 janv. 2007 à 15:18
Étant donné qu'ici:
for(i=0;i<strlen(s);++i)
{
    if(isspace(s[i]))
    {
    for(compteur=i;compteur<strlen(s);++compteur)
    s[compteur]=s[compteur+1];

    //printf("ici il y a un blanc=%u\n",i);
    }
}

tu modifie la longeur de la chaine, il suffirait d'ajouter len-- après la boucle:

for(i=0;i<len;++i)
{
    if(s[i] == ' ')
    {
        for(compteur=i;compteur<len;++compteur) s[compteur]=s[compteur+1];
        len--;
    }
}

C++ (@++)<!--
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
29 janv. 2007 à 20:45
void SansEspaces(char *s)
{
  char *d;
  while(1) {
    if(!*s) return;
    if(*s = ' ') break;
    s++;
  }
  d = s++; // SAUTE LE 1er ESPACE TROUVE
  while(*s) {    if(*s !' ') *d++ *s;
    s++;
  }
  *d = 0;
}

ciao...
BruNews, MVP VC++
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
29 janv. 2007 à 21:08
if(*s = ' ') break;
Tu remplace tout les caractères de la chaine par des espaces?

C++ (@++)<!--
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
29 janv. 2007 à 21:44

dur dur...

ciao...
BruNews, MVP VC++
0
berry007 Messages postés 3 Date d'inscription lundi 29 janvier 2007 Statut Membre Dernière intervention 30 janvier 2007
30 janv. 2007 à 08:43
merci pour vos reponses, grace a vos conseilles j'ai pus optimiser mon prog, en revanche les blancs ne sont toujours pas remplacé par un caractére speciale, ce qui était l'origine de mon probléme, sans ça la decompression est impossible,car on ne peut pas savoir a quelle moment il faut rajouter des espaces.

merci encore de l'aide apporter.
0
Rejoignez-nous