berry007
Messages postés3Date d'inscriptionlundi 29 janvier 2007StatutMembreDernière intervention30 janvier 2007
-
29 janv. 2007 à 11:27
berry007
Messages postés3Date d'inscriptionlundi 29 janvier 2007StatutMembreDernière intervention30 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 :
*************************************************/
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
A voir également:
Apportez du whisky au vieux juge blanc qui fume solution
acx01b
Messages postés280Date d'inscriptiondimanche 7 septembre 2003StatutMembreDernière intervention 8 juillet 20146 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);
berry007
Messages postés3Date d'inscriptionlundi 29 janvier 2007StatutMembreDernière intervention30 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!!
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 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)
berry007
Messages postés3Date d'inscriptionlundi 29 janvier 2007StatutMembreDernière intervention30 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.