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 :

Mettre des lettres minuscules avec accent en majuscules


Sujet :

C++

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2021
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 23
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2021
    Messages : 9
    Points : 9
    Points
    9
    Par défaut Mettre des lettres minuscules avec accent en majuscules
    Bonjour,

    Tout d'abord meilleurs vœux à vous pour cette nouvelle année.

    Pour un exercice je dois vérifier qu'une chaîne de caractères d'un tableau est un palindrome, mais avant ça je dois créer une fonction qui supprime les espaces et une autre qui met la phrase en majuscule. C'est avec cette dernière fonction que j'ai un souci.

    Je me suis basée sur la table ASCII pour convertir les lettres de a à z en majuscule, jusqu'ici ça fonctionne mais j'aurais aimé faire de même avec les minuscules accentuées.
    Pour info j'ai deux tableaux : tabCar, qui contient la chaîne de caractères qu'entre l'utilisateur au préalable, puis tabCarModif, qui contient la copie de la chaîne de caractère modifiée (en maj, sans espace, cryptée, etc...)

    Voici ma fonction :

    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
    void CIhmTableauCar::miseEnMajuscule()
    {
        clear();
        gotoxy(25,1);
        cout <<"Mettre la phrase en majuscule";
        gotoxy(25,2);
        cout <<"*****************************";
        int i=0;
        while(tabCar[i]!=0)
        {
            if ((tabCar[i]>='a') & (tabCar[i]<='z'))
                {
                    tabCarModif[i]=tabCar[i]-32;
                }
            else
                {
                    tabCarModif[i]=tabCar[i];
                }
            if ((tabCar[i]='é') | (tabCar[i]='è') | (tabCar[i]='ê') | (tabCar[i]='ë'))
                {
                    tabCarModif[i]='E';
                }
            if (tabCar[i]='à')
                {
                    tabCarModif[i]='A';
                }
            if (tabCar[i]='ç')
                {
                    tabCarModif[i]='C';
                }
            i++;
        }
        tabCarModif[i]=0;
        gotoxy(3,6);
        cout <<"Votre phrase a ete mise en majuscule. ";
        cout <<tabCarModif;
        getch();
    }
    Mon souci, c'est que quand je compile, toute ma phrase devient une suite de "C" (par exemple kayak devient CCCCC). J'ai plusieurs petites erreurs qui s'affichent dans le logiciel Qt qui sont :
    - multi-character character constant [-Wmultichar]
    - overflow in implicit constant conversion [-Woverflow]
    - suggest parentheses around assignment used as truth value [-Wparentheses] (alors qu'il y a déjà des parenthèses où il m'indique, je ne comprends pas?)

    Sauriez-vous m'éclairer sur ce qui ne va pas ?

    Merci beaucoup !

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    - Tous tes tests sont faux, = ça a jamais été pour vérifier une égalité
    - | n'est pas l'opérateur ou, c'est le ou binaire
    - Ton code change toutes les lettres en C
    - Les accents ne sont pas dans la table ASCII
    - Le support des accents dépend de l'encodage
    - Sur Linux par défaut, std::string gère (tous?) les accents, sous Windows il faut std::wstring
    - Ou une lib de gestion de chaînes
    - Ta boucle serait bien plus lisible avec un for
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2021
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 23
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2021
    Messages : 9
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par Bousk Voir le message
    - Tous tes tests sont faux, = ça a jamais été pour vérifier une égalité
    - | n'est pas l'opérateur ou, c'est le ou binaire
    - Ton code change toutes les lettres en C
    - Les accents ne sont pas dans la table ASCII
    - Le support des accents dépend de l'encodage
    - Sur Linux par défaut, std::string gère (tous?) les accents, sous Windows il faut std::wstring
    - Ou une lib de gestion de chaînes
    - Ta boucle serait bien plus lisible avec un for
    Ah oui, en effet j'ai confondu = et ==
    Je corrige ça. Pareil pour | qui devient || du coup.
    J'ai aussi enlevé mes accolades après mes if qui étaient visiblement de trop et transformé mon while en for
    Voilà ce que j'ai, du coup :
    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
    void CIhmTableauCar::miseEnMajuscule()
    {
        clear();
        gotoxy(25,1);
        cout <<"Mettre la phrase en majuscule";
        gotoxy(25,2);
        cout <<"*****************************";
        int i=0;
        for(i=0;tabCar[i]!='\0';i++)
        {
            if ((tabCar[i]>='a') & (tabCar[i]<='z'))
                tabCarModif[i]=tabCar[i]-32;
            else tabCarModif[i]=tabCar[i];
            if ((tabCar[i]=='é') || (tabCar[i]=='è') || (tabCar[i]=='ê') || (tabCar[i]=='ë'))
                 tabCarModif[i]='E';
            if (tabCar[i]=='à')
                tabCarModif[i]='A';
            if (tabCar[i]=='ç')
                tabCarModif[i]='C';
        }
        tabCarModif[i]=0;
        gotoxy(3,6);
        cout <<"Votre phrase a ete mise en majuscule. ";
        cout <<tabCarModif;
        getch();
    }
    Par contre je m'interroge pour les accents. Ne sont-ils pas dans ta table ASCII étendue ? Comme je suis sous Windows, suffit-il de trouver le numéro du caractère correspondant et le remplacer dans mon code ?

    Merci !

  4. #4
    Membre éprouvé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2012
    Messages
    375
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2012
    Messages : 375
    Points : 1 030
    Points
    1 030
    Par défaut
    Bonjour,

    La norme ASCII ne définit que les 128 premiers caractères : voir Wikipédia

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 631
    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 631
    Points : 10 558
    Points
    10 558
    Par défaut
    Citation Envoyé par lethmedayr Voir le message
    Ne sont-ils pas dans ta table ASCII étendue ?
    Oui et non Cela va dépendre de l'encodage

    • MBCS (latin-1, latin-9, ...) tu peux le faire en unsigned char, octet par octet. Évidement pour chaque table, tu as des variations.
    • Unicode UTF-8 : il faut le faire en unsigned char mais les codes varient de 1 (ASCII) à 4
    • Unicode UTF-16 : il faut le faire en wchar_t (avec L""), wchar_t par wchar_t

  6. #6
    Membre éprouvé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2012
    Messages
    375
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2012
    Messages : 375
    Points : 1 030
    Points
    1 030
    Par défaut
    Comme je suis sous Windows
    Même sous Windows, les caractères accentués d'un fichier texte ne seront pas les mêmes selon que le fichier sera ouvert avec le bloc-notes ou dans une invite de commandes.

    Ligne 11, il reste un & à remplacer par && (même chose que pour la différence entre | et ||).

  7. #7
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 565
    Points : 7 648
    Points
    7 648
    Par défaut
    Sous Windows, les encodages utilisés sont:
    - pour les fichiers textes, ce qui inclut les fichiers de code. C'est la plupart du temps du Windows-1252.
    - pour les programmes, c'est aussi du Windows-1252 par défaut pout MSVC.
    - mais la console utilise par défaut le format IBM-850 en Europe.
    Donc dans la plage ASCII, aucun problème. Dans la plage ASCII étendu, on y trouve les accents, et alors dans un texte saisi à la console les accents auront des code différents de ceux de l'application.
    Si tu dois récupérer tes chaines d'un fichier, tu devrais pouvoir écrire : if ( tabCar[i] == 'é' ) .... Si tu dois interagir avec la console c'est plus compliqué, une solution "simple" est de forcer la console à passer en Windows-1252.
    .

  8. #8
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2021
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 23
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2021
    Messages : 9
    Points : 9
    Points
    9
    Par défaut
    Bonjour,

    D'accord je vois, J'ai l'impression de me lancer dans un truc trop compliqué pour mon niveau actuel, mais je vais tenter le truc !

    De ce que je vois, l'encodage de mon Qt est sur UTF-8 par défaut.

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

Discussions similaires

  1. Mettre première lettre d'un mot en majuscule
    Par AjdsAop14 dans le forum Général Python
    Réponses: 3
    Dernier message: 29/12/2017, 04h51
  2. Réponses: 3
    Dernier message: 12/04/2016, 23h02
  3. absence totale des lettres avec accent
    Par heeedi dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 06/03/2010, 15h22
  4. [Tableaux] Affichage des lettres avec accents
    Par Fredo02 dans le forum Langage
    Réponses: 11
    Dernier message: 12/12/2007, 18h21
  5. mettre en majuscule avec accent
    Par nicerico dans le forum Langage
    Réponses: 1
    Dernier message: 06/11/2006, 08h21

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