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 :

fonction ISSPACE en C


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 899
    Par défaut fonction ISSPACE en C
    bonjour à tous,
    J'ai besoin d'utiliser la focntion ISSPACE pour compter le nombre de mots entrés dans une chaine mais apparement la fonction ne trouve jamais d'espace ou quand je rentre une chaine avec des espaces elle ne les prends pas en compte à noter j'utilise scanf peut être que ça vient de là :
    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
     
    #include <stdio.h>
    #include <stdlib.h>
    main()
    {
     /* Déclarations */
     char CH[100]; /* chaîne donnée    */
     char *P;      /* indices courants */
     N=0;
     printf("Entrez une ligne de texte (max.100 caractères) :\n");
     scanf("%s",CH);
     for(P=CH; *P; P++)
      {
     
        if (isspace(*P)) N++;
      }
    Si quelqu'un a une idée MERCI

  2. #2
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Le format %s de scanf s'arrête au premier blanc, c'est donc pas étonnant de ne pas en avoir après.

  3. #3
    Membre émérite
    Avatar de Elijha
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Avril 2003
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Avril 2003
    Messages : 314
    Par défaut
    Bonjour,

    Essaye de saisir ta phrase avec la fonction fgets.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    char CH[100] ;
    ...
    if(fgets(CH, 100, stdin)==NULL) {
        printf("Erreur lors de la saisie.\n") ;
        return 0 ;
    }
    ...
    Attention, car fgets stocke le retour chariot ('\n') dans la chaine de caractères (stdin correspond au clavier).

    Pour plus d'information voir le man de fgets.

    Bonne continuation.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 899
    Par défaut réponse à Elijha
    Citation Envoyé par Elijha Voir le message
    Bonjour,

    Essaye de saisir ta phrase avec la fonction fgets.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    char CH[100] ;
    ...
    if(fgets(CH, 100, stdin)==NULL) {
        printf("Erreur lors de la saisie.\n") ;
        return 0 ;
    }
    ...
    Attention, car fgets stocke le retour chariot ('\n') dans la chaine de caractères (stdin correspond au clavier).

    Pour plus d'information voir le man de fgets.

    Bonne continuation.
    MErçi pour ton aide là ça marche avec fgets, j'ai lu le man qui est pas trop compliqué, par contre il y aurait des améliorations à faire si par exemple l'utilisateur rentre un espace au départ et un seul mot, car le programme compte deux mots dans ce cas, pour l'instant je n'ai pas le temps de m'y pencher si par contre tu as des idées n'hésite pas.
    EXEMPLE :

    Langage_C/Pointeurs$ ./C7
    Entrez une ligne de texte (max.100 caractères) :
    [ESPACE]entre

    Tu as entre : entre
    *P =
    N = 1
    *P = e
    *P = n
    *P = t
    *P = r
    *P = e
    *P =

    N = 2
    entre
    nombre de mots = 2
    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
     
    #include <stdio.h>
    #include <stdlib.h>
    static void purger(void)
    {
        int c;
     
        while ((c = getchar()) != '\n' && c != EOF)
        {}
    }
    main()
    {
     /* Déclarations */
     char CH[100]; /* chaîne donnée    */
     char *P;      /* indices courants */
     char stTemp[1];
     int N;    
     
      /* Saisie des données */
     N=0;
     printf("Entrez une ligne de texte (max.100 caractères) :\n");
     if(fgets(CH, 100, stdin)==NULL) 
       {
        printf("Erreur lors de la saisie.\n") ;
        return 0 ;
       }
     printf("\nTu as entre : %s", CH);
     for(P=CH; *P; P++)
      {
        printf("*P = %c\n",*P);
     
        if (isspace(*P)) 
          {
            N++;
            printf("N = %i\n",N);
          }
      }   
     printf("%s",CH);
     printf("nombre de mots = %i",N);
    }

  5. #5
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Je pense qu'il faudrait au lieu de compter le nombre de suite d'espaces, déterminer ce qu'on appelles des "mots" et compter ce nombre de mot en suivant la définition qu'on aura trouvé.

    Je pense à un petit algorithme :
    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
    char * p = ...;
    while(*p)
    {
            if( isMot(&p) )
                    ++nbMot;
    }    
     
    char * isMot(char ** p)
    {
           char * debut = *p;
           if(! isCaractereMot(*(*p)++) )
                   return NULL; //si ce n'est pas un mot, on retourne NULL (= false)
          while(**p && isCaractereMot(**p) )
         {
                  //conditions particulières (exemple, - est accepté dans un mot mais pas -- )
                  ++(*p);
         }
         return debut; //on retourne le pointeur de début du mot pour éventuellement enregistrer le mot = true.
    }
    Sinon tu peux aussi aller voir du côté des regex : http://nicolasj.developpez.com/articles/regex/

Discussions similaires

  1. Fonction isspace sous Windows et É
    Par troumad dans le forum C
    Réponses: 3
    Dernier message: 01/04/2011, 11h42
  2. Pb avec fonctions isspace, isalpha, isdigit
    Par fbourgeois dans le forum Code::Blocks
    Réponses: 5
    Dernier message: 24/05/2007, 19h50
  3. pb avec la fonction isspace
    Par salseropom dans le forum C
    Réponses: 7
    Dernier message: 01/12/2006, 14h12
  4. fonction printf
    Par ydeleage dans le forum C
    Réponses: 7
    Dernier message: 30/05/2002, 11h24
  5. FOnction api specifiant la position de la souris
    Par florent dans le forum C++Builder
    Réponses: 4
    Dernier message: 15/05/2002, 20h07

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