Surpression espace

Résolu
fadiam Messages postés 15 Date d'inscription samedi 6 février 2010 Statut Membre Dernière intervention 16 mars 2010 - 4 mars 2010 à 16:04
tpoinsot Messages postés 345 Date d'inscription mardi 1 juin 2004 Statut Membre Dernière intervention 17 octobre 2014 - 5 mars 2010 à 07:56
Bonjour à tous

Je cherche le moyen de supprimer des espaces de telle sorte à ce qu'il n'en reste un. Lorsque l'on entre une chaine de caractère :
"code source" doit etre transformé en "code source"
de même s'il y a plusieurs mots :
"code source c'est top" -> "code source c'est top"

des idées?

J'ai fait ca :
void suppr_espace(char * ligne){

    int j, i, n;
    n=strlen(ligne);

    for(i=0;i<n;i++)
        if( (ligne[i]==' ') && (ligne[i++]=' ')*/)
        {

                for(j=i++;j<n;j++)
                    ligne[j]=ligne[j+1];

        }
}


le problème est que s'il y a plus de deux espaces, ca ne marche plus, juste une espace est supprimé. Moi je veux qu'il ne reste plus qu'un espace.

merci

8 réponses

tpoinsot Messages postés 345 Date d'inscription mardi 1 juin 2004 Statut Membre Dernière intervention 17 octobre 2014 4
5 mars 2010 à 07:56
Une "étiquette", et quand tu fais "goto étiquette" le programme continue à l'instruction après l'étiquette.

Il parait que c'est une pratique très mauvaise. Elle est condamnée par le clergé.
3
tpoinsot Messages postés 345 Date d'inscription mardi 1 juin 2004 Statut Membre Dernière intervention 17 octobre 2014 4
4 mars 2010 à 16:22
Bonjour,

C'est l'utilisation de i++ qui ne va pas. Et il ne faut pas limiter par i<n mais par i<n-1.

        if( (ligne[i]==' ') && (ligne[i+1]=' ')*/)


ensuite :
                for(j=i;j<n;j++)

Là, tu vas jusqu'à n pour choper le 0.
Mais après, il faut faire n=n-1 puisque tu as supprimé un caractère.

De toute manière tu vas te rendre compte que ta méthode non plus ne va pas.
Si tu la conserves, fais au moins
    for(i=0;i<n-1;i++)
        while ( i<n-1 && (ligne[i]==' ') && (ligne[i+1]=' ')*/)
0
tpoinsot Messages postés 345 Date d'inscription mardi 1 juin 2004 Statut Membre Dernière intervention 17 octobre 2014 4
4 mars 2010 à 16:24
j'ai copié ta ligne avec */ dans le if : retire ça !
0
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 19
4 mars 2010 à 18:11
// ON RETOURNE LA FIN D'ECRITURE POUR EVENTUEL CHAINAGE.
// strlen() est un 1er parcours, inutile donc nuisible aux perfs.
char* suppr_espace(char *psz)
{
char *d psz, prev 0, a;
while(a = *psz) {
if(a ' ') if(prev ' ') goto nextCHR;
*d++ = a;
nextCHR:
prev = a;
psz++;
}
*d = 0;
return d;
}


ciao...
BruNews, MVP VC++
0

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

Posez votre question
fadiam Messages postés 15 Date d'inscription samedi 6 février 2010 Statut Membre Dernière intervention 16 mars 2010
4 mars 2010 à 19:11
oups j'avai pas vu le */!!. Je teste ca tout de suit. merci
0
fadiam Messages postés 15 Date d'inscription samedi 6 février 2010 Statut Membre Dernière intervention 16 mars 2010
4 mars 2010 à 19:24
char* suppr_espace(char *psz)
{
char *d psz, prev 0, a;
while(a = *psz) {
if(a ' ') if(prev ' ') goto nextCHR;
*d++ = a;
nextCHR:
prev = a;
psz++;
}
*d = 0;
return d;
}


Désolé, mais je connais pas la signification de nextCHR.
0
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 19
4 mars 2010 à 21:00
C'est sur que si on cherche la 'signification' d'un label de saut, on n'est pas rendu.

ciao...
BruNews, MVP VC++
0
fadiam Messages postés 15 Date d'inscription samedi 6 février 2010 Statut Membre Dernière intervention 16 mars 2010
4 mars 2010 à 23:05
je voulais juste savoir ce que c'était étant donné que c'est la première fois que je vois cette expression. Ca ne me dit toujours pas ce que c'est : 'un label de saut'. merci
0