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 les espaces dans une chaîne de caractère


Sujet :

C

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2010
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2010
    Messages : 106
    Points : 71
    Points
    71
    Par défaut Supprimer les espaces dans une chaîne de caractère
    S'il vous plait comment retirer les espaces dans une phrase en C
    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    int main()
    {
        char Phrase[]="salut tout le monde";
        char NewPhrase[]="";
        int i;
        int a= strlen(Phrase);
        for(i=0;i<a;i++){
            if(Phrase[i]!=" ")
            {
               strcat(NewPhrase,Phrase[i]);
            }
     
        }
         printf("%s\n",NewPhrase);
         return 0;
    }

  2. #2
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 512
    Points : 641
    Points
    641
    Par défaut
    ton tableau NewPhrase est trop petit pour contenir ton résultat.

    il en resulte que tu écrit en dehors du tableau

  3. #3
    Membre confirmé Avatar de Flow_75
    Femme Profil pro
    Ingénieure
    Inscrit en
    Mai 2005
    Messages
    1 096
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieure
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 096
    Points : 633
    Points
    633
    Par défaut
    Salut,

    quelques erreurs :

    Newphrase posera des problemes d'allocation.

    Pour ce cas, utilise un pointeur + allocation dynamique

    pour la boucle parcourant ta chaine d'origine pas besoin de strcat, preferes un copiage caractère à caractère classique

    par exemple :

    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    int main()
    {
        char Phrase[]="salut tout le monde";
        char *NewPhrase;
        int i, j = 0;
        int a= strlen(Phrase);
    
        NewPhrase = malloc(a*sizeof(char)+1);
    
        if(NewPhrase == NULL)
        {
            exit(0);
         }
    
        for(i=0;i<a;i++){
            if(Phrase[i]!=" ")
            {
               NewPhrase[j++] = Phrase[i];
            }
     
        }
         printf("%s\n",NewPhrase);
         return 0;
    }

  4. #4
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 947
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 947
    Points : 5 660
    Points
    5 660
    Par défaut
    Gie,
    Citation Envoyé par Flob91 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        int a= strlen(Phrase);
     
        NewPhrase = malloc(a*sizeof(char));
    Attention, il faut strlen + 1 caractères, car il faut le zéro final, que tu as d'ailleurs oublié.

    Je n'ai pas regardé le reste.

  5. #5
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2010
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2010
    Messages : 106
    Points : 71
    Points
    71
    Par défaut
    Merci ça marche j'ai juste remplacer Phrase[i]!=" " par Phrase[i]!=' '

  6. #6
    Membre confirmé Avatar de Flow_75
    Femme Profil pro
    Ingénieure
    Inscrit en
    Mai 2005
    Messages
    1 096
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieure
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 096
    Points : 633
    Points
    633
    Par défaut
    Citation Envoyé par droggo Voir le message
    Gie,

    Attention, il faut strlen + 1 caractères, car il faut le zéro final, que tu as d'ailleurs oublié.

    Je n'ai pas regardé le reste.
    ah oui, merci, j'avoue que je l'oublie souvent ce +1....

    Citation Envoyé par Med_be Voir le message
    Merci ça marche j'ai juste remplacer Phrase[i]!=" " par Phrase[i]!=' '
    N'oublies pas le

  7. #7
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 947
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 947
    Points : 5 660
    Points
    5 660
    Par défaut
    Hio,
    Citation Envoyé par Flob91 Voir le message
    ah oui, merci, j'avoue que je l'oublie souvent ce +1....
    Et dans le cas présent, il ne pas non plus oublier de mettre le zéro final dans la nouvelle chaîne.

  8. #8
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 078
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 078
    Points : 2 338
    Points
    2 338
    Par défaut
    Je vois que vous faite un malloc et tout plein d'autre chose, mais ce code simple pourrait suffire, non ?

    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
     
    int main(void)
    {
      char chaine[100] = "  s a n s     _      e s p a c e ";
     
      printf("%s$\n", chaine);
     
      int i;
      int j = -1;
      for (i = 0; chaine[i]; i++)
        if (chaine[i] != ' ')
            chaine[++j] = chaine[i];
      chaine[++j] = '\0';
     
      printf("%s$\n", chaine);
     
      return (0);
    }
    La seul condition, c'est d'avoir une chaine dont les élément sont modifiable.

Discussions similaires

  1. Supprimer les espaces dans une chaîne
    Par karaz_karaz dans le forum x86 16-bits
    Réponses: 3
    Dernier message: 28/05/2008, 16h27
  2. [XPATH] supprimer les espaces dans une chaîne
    Par joeyd dans le forum XSL/XSLT/XPATH
    Réponses: 14
    Dernier message: 17/10/2007, 15h56
  3. Supprimer les espaces dans une chaine de caractères
    Par arnaudperfect dans le forum Shell et commandes GNU
    Réponses: 13
    Dernier message: 23/07/2007, 22h24
  4. Effacer les espaces dans une chaîne de caractères
    Par JohnnyWalk dans le forum Débuter avec Java
    Réponses: 16
    Dernier message: 19/07/2007, 14h13
  5. supprimer les espaces dans une chaîne de caratères.
    Par Empty_body dans le forum Langage
    Réponses: 2
    Dernier message: 12/09/2006, 18h43

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