Surpression espace

Résolu
Signaler
Messages postés
15
Date d'inscription
samedi 6 février 2010
Statut
Membre
Dernière intervention
16 mars 2010
-
Messages postés
345
Date d'inscription
mardi 1 juin 2004
Statut
Membre
Dernière intervention
17 octobre 2014
-
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

Messages postés
345
Date d'inscription
mardi 1 juin 2004
Statut
Membre
Dernière intervention
17 octobre 2014
4
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é.
Messages postés
345
Date d'inscription
mardi 1 juin 2004
Statut
Membre
Dernière intervention
17 octobre 2014
4
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]=' ')*/)
Messages postés
345
Date d'inscription
mardi 1 juin 2004
Statut
Membre
Dernière intervention
17 octobre 2014
4
j'ai copié ta ligne avec */ dans le if : retire ça !
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
// 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++
Messages postés
15
Date d'inscription
samedi 6 février 2010
Statut
Membre
Dernière intervention
16 mars 2010

oups j'avai pas vu le */!!. Je teste ca tout de suit. merci
Messages postés
15
Date d'inscription
samedi 6 février 2010
Statut
Membre
Dernière intervention
16 mars 2010

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.
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
C'est sur que si on cherche la 'signification' d'un label de saut, on n'est pas rendu.

ciao...
BruNews, MVP VC++
Messages postés
15
Date d'inscription
samedi 6 février 2010
Statut
Membre
Dernière intervention
16 mars 2010

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