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 :

Programme pour compter les minuscules


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2019
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2019
    Messages : 14
    Par défaut Programme pour compter les minuscules
    Bonjour tout le monde,

    Je débute en langage C et je cherche à faire un programme qui pourrait ne compter que les minuscules dans une chaine de caractère.
    Pour l'instant j'ai réalisé ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        char chaine[] = "Salut";
        int taille = 0;
        int i = 0;
            //On récupère la longueur de la chaîne dans taille
        taille = strlen(chaine);
        for(i=0; i<taille; i++)
        {
            printf("%c", chaine[i]);
        }
    Elle me permet d'afficher le tableau de char caractères après caractères, juste pour tester

    Pour conserver les minuscules je pensais incrémenter un compteur dans une boucle if, en utilisant le code ascii.
    Comment pourrais-je faire une boucle : "si char[i] a un code ascii compris entre 97 et 122" ?

    Merci par avance

  2. #2
    Membre confirmé
    Homme Profil pro
    .
    Inscrit en
    Octobre 2019
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Octobre 2019
    Messages : 21
    Par défaut
    La bibliothèque standard C fournit islower. Cette fonction est utilisable non seulement avec des chaînes ASCII, mais aussi avec d'autres codages et environnements.

    Au fait, chaque chaîne de caractères est terminée par un caractère nul. En itérant sur la chaîne et s'arrêtant au caractère nul, on obtiendrait la longeur de la chaîne sans utiliser strlen au préalable.

  3. #3
    Membre confirmé
    Inscrit en
    Août 2009
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 69
    Par défaut Recherche de lettre minuscule dans une chaîne
    Pour répondre spécifiquement à la question, je vous propose d'utiliser la fonction prédéfinie islower.
    Elle a pour prototype int islower(char c) : elle fournit la valeur 1 (vrai) si c est une lettre minuscule et la valeur 0 (faux) dans le cas contraire.

    Donc vous devez réaliser un test sur chaque caractère de la chaîne, en utilisant la fonction ci-dessus.

    Au boulot !

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2019
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2019
    Messages : 14
    Par défaut
    Super ça marche merci beaucoup ! C'est en effet plus facile que d'utiliser directement le code Ascii
    Ma boucle For ressemble donc à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for(i=0; i<taille; i++)
        {
            if(islower(chaine[i]))
            {
                compteur = compteur + 1;
            }
        }
    Il suffit d'un printf et je peux afficher le nombre de minuscules.

    Merci encore

  5. #5
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 771
    Par défaut
    Citation Envoyé par Hugo_Loup Voir le message
    d'utiliser directement le code Ascii
    en C, le code ASCII/ un caractère (avec les simple quotes) est un entier. Le type char est avant tout un type pour stocker un entier sur 8 bits (<- attention le code ASCII est sur 7 bits, de 0 à 127)
    De plus, que ce soit les lettres minuscules et majuscules ou les chiffres, le code ASCII garde l'ordre

    Parce que je n'ai rien comme les fonctions comme islower mais souvent sous Windows, elles n'existent pas ou avec une autre signature

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        char c;
     
        for(i=0, compteur=0; i < taille; i++) {
            c = chaine[i];
     
            if ((c >= 'a' /*97*/) && (c <= 'z' /*122*/)) {
                ++compteur;
            }
        }

  6. #6
    Membre chevronné
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Septembre 2015
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Septembre 2015
    Messages : 213
    Par défaut
    pour éviter de faire 2 boucles sur chaine :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    char *c;
    c = chaine;
    while (*c)
    {
        if (*c ... ) ...
        c++;
    }

  7. #7
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 771
    Par défaut
    Citation Envoyé par Xelland Voir le message
    pour éviter de faire 2 boucles sur chaine :
    C'est un peu trop technique pour lui déjà il faut savoir que while (*c) { est un test réduit de while ((*c) != '\0') {.
    Et qu'ensuite, une chaîne de caractères en C (avec les double quotes) doit être terminée par le caractère final/ sentinelle '\0'.

    C'est d'ailleurs ce que fait la fonction strlen qu'il utilise, et donc dans ton cas son appel est inutile.

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

Discussions similaires

  1. Programme pour compter les lignes d'un fichier texte?
    Par codon21 dans le forum Windows
    Réponses: 1
    Dernier message: 19/03/2009, 07h36
  2. Requete pour compter les points dans un championnat
    Par IG2da dans le forum Langage SQL
    Réponses: 3
    Dernier message: 28/10/2006, 17h58
  3. Problème pour compter les lignes d'un résultat
    Par Yoshidu62 dans le forum Requêtes
    Réponses: 2
    Dernier message: 06/07/2006, 11h18
  4. requete pour compter les valeurs ds une colonne
    Par smariteau dans le forum Requêtes
    Réponses: 2
    Dernier message: 10/02/2006, 17h37
  5. existe t 'il des programme pour transformer les bases
    Par creazone dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 05/10/2004, 14h11

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