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 :

Supprimer le nombre de blanc dans une chaine de caractère


Sujet :

C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 193
    Points : 53
    Points
    53
    Par défaut Supprimer le nombre de blanc dans une chaine de caractère
    Bonjour,

    Je suis nouveau dans ce forum (c'est mon premier post sur ce forum, voire le premier de ma vie sur un forum ) et débutant en langage c.

    En fait j'ai un problème dans un exercice de programmation c dont l'intitulé est le suivant:
    "Ecrire une fonction char* supblanc1 (char* ch) qui permet de transformer toute séquence de plusieurs blancs en un seul. ATTENTION: la chaine ch doit rester inchangée, c'est la châine renvoyée par la fonction qui contient les changements"

    Voici ce que j'ai fait: (je ne crois pas kil ya de problème sur la fonction en elle même mais plutot sur le main)
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    /*lg= longueur de la chaine ch */
    /*prev= met 1 si le précédent est un espace ' ' et 0 si non*/
     
    char * supblanc (char*ch){
        char *nouv, *aux, *auxn;
        int lg=0, prev=0;
     
        aux=ch+1;
     
        while(*aux){
            if(*aux==' '){
                if(prev==0){
                    prev=1;
                    lg++;
                }
            }else{
                prev=0;
                lg++;
            }
            aux++;
        }
     
        nouv= (char*) malloc(lg+1);
        aux=ch;
        auxn=nouv;
     
        while(*aux){
            if (*aux==' '){
                if(prev==0){
                    prev=1;
                    *auxn=*aux;
                }
            }else{
                prev=0;
                *auxn=*aux;
            }
            aux++;
            auxn++;
        }
     
        *auxn='\0';
        return nouv;
    }
     
    int main(int argc, char** argv) {
        char tab [5000]; char*nouv, *aux;
        aux=(strdup(gets(tab)));
        nouv=(char*) malloc(strlen(aux)+1);
        nouv=supblanc(aux);
        while(*nouv){
            putchar(*nouv++);
        }
        return (EXIT_SUCCESS);
    }
    Ce serait gentil si quelqu'un puisse me dépanner. Merci

  2. #2
    Membre du Club
    Inscrit en
    Juin 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Âge : 32

    Informations forums :
    Inscription : Juin 2009
    Messages : 33
    Points : 43
    Points
    43
    Par défaut
    Bonjour,

    Premièrement, utilise les balises CODE (le dièse dans la barre de boutons) pour écrire du code proprement parce que sinon, c'est incompréhensible pour ceux qui souhaitent te répondre.

    Deuxièmement, choisis mieux tes noms de variables (des noms pas ou peu abrégés) car sinon tu vas t'y perdre, et nous aussi par la même occasion !

    Troisièmement, un nouveau code mais qui marche :

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    char * supblanc(char * ch)
    {
       char * nouvelleChaine, c;
       int longueurFinale = 0, espacePrec = 0, i = 0, j = 0;
     
       c = ch[0];
     
          // Boucle de comptage
     
       while(c != '\0') // tant qu'on n'est pas arrivé au caractère nul
       {
          if(c != ' ') // si c'est pas un espace
          {
             longueurFinale++;
             espacePrec = 0;
          }
          else // sinon
          {
             if(espacePrec == 0)
             {
                longueurFinale++;
             }
             espacePrec = 1;
          }
          i++;
          c = ch[i];
       }
     
       nouvelleChaine = (char *)malloc(longueurChaine+1); // il faut compter le '\0'
       i = 0;
     
       c = ch[0];
     
          // Boucle de remplissage de nouvelleChaine
     
       while(c != '\0') // tant qu'on n'est pas arrivé au caractère nul
       {
          if(c != ' ') // si c'est pas un espace
          {
             nouvelleChaine[j] = c;
             j++;
             espacePrec = 0;
          }
          else // sinon
          {
             if(espacePrec == 0)
             {
                nouvelleChaine[j] = c;
                j++;
             }
             espacePrec = 1;
          }
          i++;
          c = ch[i];
       }
     
       nouvelleChaine[j] = '\0';
     
       return nouvelleChaine;
    }
    Voilà un code qui marche très bien (je l'ai moi-même testé).

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 193
    Points : 53
    Points
    53
    Par défaut
    Ok merci (et ossi pour les prochaines fois je suivré té conseils)...
    Je vé tester sur mon pc et je te donneré de mes nouvelles...

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 193
    Points : 53
    Points
    53
    Par défaut
    Oui ça marche... Merci je viens de remarquer que je me suis fatigué pour rien en cherchant à manipuler avec des pointeurs mé kon pouvé facilement faire avec un tableau...

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

Discussions similaires

  1. Supprimer tous les blancs dans une chaine de caractères
    Par joel74 dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 20/02/2014, 16h19
  2. Réponses: 10
    Dernier message: 30/07/2009, 13h08
  3. calculer le nombre d'espaces dans une chaine de caractère
    Par tang le breton dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 05/06/2009, 10h45
  4. Réponses: 1
    Dernier message: 13/05/2009, 13h49
  5. Réponses: 4
    Dernier message: 04/03/2009, 10h18

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