IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Enlever les espaces redondants....


Sujet :

C

  1. #1
    BFH
    BFH est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 45
    Points : 34
    Points
    34
    Par défaut Enlever les espaces redondants....
    Bonjour à tous,
    voila en poursuivant la réalisation des exercices de mon livre de C je recontre un probleme avec un exercice qui demande de remplacer un ou plusieurs espaces par un seul espace dans les phrases.

    Lorsque j'ai une serie d'espaces tout va bien je n'en retrouve qu'un seul en sortie mais lorsque je n'en ai qu'un il disparait, si qq pouvait m'expliquer pourquoi....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    int replace()
        {
        int c,d;
        while((c=getchar())!='#')
            {  
            if(c==' ' && (d=(c=getchar()))==' ')
                {
                putchar(' ');
                } 
            else
                {
                if(c==' ' && (d=(c=getchar()))!=' ')
                    {putchar(c);} 
                else
                    {putchar(c);}   
                }      
            }
        }
     
    int main()
        {  
        printf("Saisissez votre phrase : \n");
        replace();
        printf("\n");
        system("pause");
        }
    Comme pourrons le voir les pro je suis aussi loin de produire du code optimisé donc si vous avez des optimisations a me proposer n'hesitez pas!
    D'avance merci.

  2. #2
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Lorsque j'ai une serie d'espaces tout va bien
    Je ne crois pas que ca marche dans ce cas pour plus de deux espaces. J'ai l'impression que tu divises le nombre d'espaces par 2
    d ne sert à rien dans le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(c==' ' && (d=(c=getchar()))!=' ') 
             {putchar(c);} 
       else 
             {putchar(c);}
    A quoi sert le if else ? Dans tous les cas, on fait putchar. Cela signifie plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(c==' ') c=getchar(); 
    putchar(c);
    Je te propose qq chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        do  {
               c=getchar();
               putchar(c);
               if(c==' ')
               {
                  while ((c=getchar())==' ' );
                  putchar(c);
               }
             } while(c!='#');
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  3. #3
    BFH
    BFH est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 45
    Points : 34
    Points
    34
    Par défaut
    Merci bien Diogene, ton code fonctionne parfaitement.
    Il me reste encore une question cependant, quand je mets ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    while((c=getchar())!='#')
            {  
            putchar(c);
            if(c==' ')
                {
                while((c=getchar())==' ')
                    putchar(c);
                }     
            }
    Cela ne fonctionne pas! Je ne comprend pas pourquoi, ce code me semble etre la même chose que ce que tu m'a donné auparavant...

    Edit: D'accord j'ai compris=> si le caractère qui suit un espace est un espace alors on ne fait rien... Moi dans mon code j'avais pas mis le ; c'est pour cela que ça ne fonctionnait pas! merci

  4. #4
    Membre éclairé Avatar de reggae
    Profil pro
    Inscrit en
    Août 2005
    Messages
    773
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 773
    Points : 795
    Points
    795
    Par défaut
    Il y a quand même un différence entre while et do while...
    Le premier n'exécute pas forcément la boucle alors que do while oui...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/12/2005, 12h05
  2. Réponses: 3
    Dernier message: 28/10/2005, 14h38
  3. enlever les espaces
    Par moimoi_1 dans le forum Langage
    Réponses: 3
    Dernier message: 09/08/2005, 09h57
  4. Enlever les espaces inutiles d'un AnsiString
    Par jamesb dans le forum C++Builder
    Réponses: 2
    Dernier message: 27/01/2005, 12h40
  5. Enlever les espaces
    Par Claythest dans le forum Langage
    Réponses: 6
    Dernier message: 03/06/2003, 14h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo