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 :

conversion maj min


Sujet :

C++

  1. #1
    Inactif  

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    534
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 534
    Points : 403
    Points
    403
    Par défaut conversion maj min
    Bonsoir

    Avec la STL pas de fonction directe pour convertir une "string" en majuscules ou en minuscules.

    Certes l' alphabet occidental ne représente pas , ce dont on parle dans le monde...

    Mais venons en au faît de traduire tantôt minuscule , majuscule et voiçi ma première approche :
    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
     
    #include <iostream>
    #include <string>
     
    using namespace std ;
     
    short  char_lower( char c )
    { return tolower(c) ; }
     
    short  char_upper( char c )
    { return (short) toupper(c) ; }
     
    void str_upper( char&  c )
    { c = (char) toupper(c) ; }
     
    void str_lower( char&  c )
    { c = (char) tolower(c) ; }
     
     
    void  do1(void)
    { string z;
      char buf[512] ;
      cin.getline( buf, 255, '\n')  ;
      z = buf ;
      cout << z << endl;
      for_each( z.begin(), z.end(), str_upper ) ;
      cout << "for_each upper= " << z << endl ;
      for_each( z.begin(), z.end(), str_lower ) ;
      cout << "for_each lower= " << z << endl ;
      transform( z.begin(), z.end(), z.begin(), char_lower ) ;
      cout << "Transform Lower " << endl ;
      cout << z << endl ;
      transform( z.begin(), z.end(), z.begin(), char_upper ) ;
      cout << "Transform Upper" << endl ;
      cout << z << endl ;
    }
     
    #pragma argsused
    int main( int argc , char * argv [] )
    { do1();
      return 0;
    }
    J' ai pensé que pour faire la conversion majuscule minuscule ou l' inverse il ne nécéssitait que deux fonctions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    void str_to_upper( string& z  )
    { for( size_t i = 0 ; i < z.length() ; i++ )
      z[ i ] = toupper(z[ i ]  ) ;
    }
     
    void str_to_lower( string& z )
    { for ( size_t i = 0 ; i < z.length() ; i++ )
      z[ i ] = tolower( z[ i  ] ) ;
    }
    Q' en pensez-vous ?
    On pourrait faire mieux en faisant en sorte que "str_to_lower" et "str_to_upper" renvoient la chaîne ainsi passée en référence ?

    Cordialement.

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Salut

    Trois remarques par rapport à ton code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    string z;
    char buf[512] ;
    cin.getline( buf, 255, '\n')  ;
    z = buf ;
    Pourquoi pas plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    string z;
    getline(cin, z);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    transform( z.begin(), z.end(), z.begin(), char_lower ) ;
    Vu que char_lower ne fait a priori rien d'autre qu'appeler tolower, pourquoi ne pas écrire plus simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    transform( z.begin(), z.end(), z.begin(), tolower ) ;
    Et là cela fera exactement ce que tu as écrit dans str_to_lower, mais en plus optimisé.

    ...C'est dans la FAQ et en post-it sur ce forum .

  3. #3
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Ceci dit le problème est légèrement plus compliqué à causes des locales.
    Idéalement, c'est ainsi qu'il faut procéder : http://gcc.gnu.org/onlinedocs/libstd...e/howto.html#7. La string_algo de boost vient en surcouche pour faciliter ces traitements.

    Mais d'après ce que j'ai compris, il reste encore le problème de certaines langues comme l'allemand, où des lettres sur un seul signe en majuscules en prennent deux en minuscules : ex. \beta (autre nom en allemand) qui devient 'ss'.

    Le mieux est de faire une recherche sur google groups des posts de James Kanze au sujet des tranformations et des locales.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  4. #4
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Et c'est encore pire pour la conversion dans l'autre sens... Suivant les mots, SS peut devenir ss ou alors ß. Donc il faut un dictionnaire pour convertir. Et je ne parle pas du fait qu'il est possible (est-ce vrai ?) qu'il n'y ait pas bijection, même en terme de mots, ce qui nécesiterait une analyse sémentique.

    Et puis si on veut convertir des phrases, et non plus des mots, des problèmes apparaissents dans toutes les langues. Que devrait donner la version minuscule de "LE PARIS DE NOS ANCÊTRES" ?
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  5. #5
    Membre actif Avatar de Grulim
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 234
    Points : 288
    Points
    288
    Par défaut
    Citation Envoyé par JolyLoic
    "LE PARIS DE NOS ANCÊTRES"
    je croyais que les majuscules accentuées n'existait pas en français académique ?

    NB: et si j'ai faux, je ne voit pas où est le pb ?

  6. #6
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 670
    Points
    10 670
    Billets dans le blog
    3
    Par défaut
    Ben il parle de mettre la phrase en minuscule. Donc la majuscule du début, faut-il un P majuscule à Paris, etc...

  7. #7
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Les majuscules accentuées existent bien. Avant on en avait pas à cause d'outils qui ne les permettaient pas.
    Toutes les docs de style&typographie que je connais (on trouve toujours des liens depuis depuis le monde de (La)TeX) les conseille.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  8. #8
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Voir exemple http://www.orthotypographie.fr.st/accents.htm
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  9. #9
    Inactif  

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    534
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 534
    Points : 403
    Points
    403
    Par défaut
    Bonsoir,

    C' est bien ce que je redoutais. S' il n' y a pas de fonction standard en C++ pour les "string" afin d' effectuer une conversion majuscule minuscule ou l' inverse, c' est sans doûte pour des raisons linguistiques.

    Si la conversion majuscule minuscule ( ou l' inverse ) pose déjà des difficultés avec les langues Indo-europénnes, j' imagine le problème avec l' Arabe littéraire , l' Indien, le Chinois, le Japonnais , sans parler des dialectes de ces mêmes langages. Etc ... etc... Sans parler encore des langues mortes !

    Cordialement.

  10. #10
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 670
    Points
    10 670
    Billets dans le blog
    3
    Par défaut
    Surtout que y'a pas mal de langues où je suppose minuscule / majuscule ne veut rien dire.

  11. #11
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Comme le chinois je pense. Pour le japonais on peut envisager des convertions entre leur trois alphabets, mais je ne crois pas que cela soit complètement automatisable.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  12. #12
    Inactif  

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    534
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 534
    Points : 403
    Points
    403
    Par défaut
    Bonjour,

    Adieu cette vieille période où le C s' imaginait pouvoir traduire une chaîne en minuscule majuscule ( ou l' inverse (strlwr, strupr ) ).

    L' ethnocentrisme ?

    En plaisantant je dirai que l' Anglais écrit "caoutchouc" là où il pronnonce "élastique".

    Mais c'est un fait que l' Anglais a une position hégémonique dans le domaine des échanges culturels.

    Cordialement.[

  13. #13
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Citation Envoyé par Luc Hermitte
    Comme le chinois je pense. Pour le japonais on peut envisager des convertions entre leur trois alphabets, mais je ne crois pas que cela soit complètement automatisable.
    D'autant plus que si mes souvenirs de japonnais sont exacts, ça n'a pas vraiment de sens de convertir les mots entre leurs 4 jeux de caractères (si on compte le romanji), les différents jeux de caractères étant utilisés dans des contextes différents.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  14. #14
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 670
    Points
    10 670
    Billets dans le blog
    3
    Par défaut
    この説明のためにあなたに感謝しなさい

  15. #15
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Ah oui. J'avais oublié le romanji.

    Il y a vaguement le passage hiragana -> kanji qui peut avoir du sens je pense. Ce que j'ai vu (films/séries/...) me fais dire que des signes en hiragana peuvent être condensés en kanji, ce dernier étant choisi dans une liste de kanji qui ont un sens qui se prononce selon la "spéc" en hiragana. D'où le non-automatisable.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  16. #16
    Membre actif Avatar de Grulim
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 234
    Points : 288
    Points
    288
    Par défaut
    Citation Envoyé par Aurelien.Regat-Barrel
    Ben il parle de mettre la phrase en minuscule. Donc la majuscule du début, faut-il un P majuscule à Paris, etc...
    je croyais qu'il voulait parler de Pâris (héros de la mythologie grecque) !
    je crois que le français écrit ne doit pas utiliser les majuscules accentuées d'après ce qu'en dit l'Académie Française... mais je peux me tromper.

  17. #17
    Membre actif Avatar de Grulim
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 234
    Points : 288
    Points
    288
    Par défaut
    Citation Envoyé par Grulim
    Citation Envoyé par Aurelien.Regat-Barrel
    Ben il parle de mettre la phrase en minuscule. Donc la majuscule du début, faut-il un P majuscule à Paris, etc...
    je croyais qu'il voulait parler de Pâris (héros de la mythologie grecque) !
    je crois que le français écrit ne doit pas utiliser les majuscules accentuées d'après ce qu'en dit l'Académie Française... mais je peux me tromper.
    mea culpa ! je me suis effectivement tromper au sujet des majuscules accentuées

  18. #18
    Inactif  

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    534
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 534
    Points : 403
    Points
    403
    Par défaut
    Bonsoir,

    Pas si évident que cela , de convertir une chaîne de caractères en majuscules ou minuscules ( ou l' inverse)...

    Je me suis fondé sur l' impérialisme Anglo-Américain, ce qui ne prend qu' un octet pour convertir un signe (graphème).


    Concernant d' autres langues ( Indien, Arabe, Chinois, Japonais), deux octets (min) sont nécéssaires pour traduire un signe. (le fameux wide-char ).

    Pour ce qui est des peuples d' Afrique occidentale ( Mossi, Dogon, Peul, Bambara etc...) je ne vois pas ce que la majuscule a de plus que la minuscule.


    Je ne connais malheureusement pas toutes les langues et leurs dialectes.

    Vous peut-être ?

    Cordialement

  19. #19
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Citation Envoyé par Luc Hermitte
    Il y a vaguement le passage hiragana -> kanji qui peut avoir du sens je pense. Ce que j'ai vu (films/séries/...) me fais dire que des signes en hiragana peuvent être condensés en kanji, ce dernier étant choisi dans une liste de kanji qui ont un sens qui se prononce selon la "spéc" en hiragana. D'où le non-automatisable.
    En fait, c'est plutôt l'inverse. Historiquement, les Japonnais ont importé les kanjis de Chine. Par contre, il leur manquait des kanjis pour écrire les nombreux mots grammaticaux de leur langue, il ont donc pris des kanjis dont il n'ont gardé que l'aspect phonétique et qu'ils ont simplifié, ce qui a donnée les hiragana.

    Aujourd'hui, si ma mémoire est bonne, ils utilisent :
    - Les kanji pour la plupart des mots à sens (un Japnnais voulant lire vite sautera tout ce qui n'est pas kanjis)
    - Les hiragana pour les mots grammaticaux, les mots dont les kanjis sont trop peu connus
    - Les katakana pour les mots d'origine étrangère (mais assimilés) récents, la mise en italique
    - Les romanji pour les mots étrangers
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  20. #20
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Je n'ai pas été clair. Sur leur claviers qui n'ont pas des milliers de touches, il me semble qu'il tapent sous Word/... des hiraganas qui sont ensuite condensés en Kanjis. Je voulais juste parler de cet aspect en fait.

    (Sinon un même kanji peut avoir plusieurs sens et prononciations (-> plusieurs transcriptions en hiragana).)
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

Discussions similaires

  1. [AC-2007] Mot de Passe - Respect Maj / Min
    Par Alain7751 dans le forum IHM
    Réponses: 3
    Dernier message: 12/04/2009, 21h51
  2. Problème de maj/min dans une requête
    Par ruff15 dans le forum DB2
    Réponses: 9
    Dernier message: 11/10/2007, 21h06
  3. [XP] Témoin état Maj/Min
    Par apache95 dans le forum Windows XP
    Réponses: 7
    Dernier message: 25/12/2006, 19h01
  4. [Ingres] petit problème de MAj - Min
    Par cyrill.gremaud dans le forum Langage SQL
    Réponses: 13
    Dernier message: 22/12/2006, 11h13
  5. [VB6]ne pas faire la différence Maj/min dans une chaine
    Par dbozec dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 14/04/2006, 12h32

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