OVH Cloud OVH Cloud

j'ai besoin d'aide

43 réponses
Avatar
Ghislain Tchoudjeu Ngaha
slt a tous,

je ne m'y connais pas du tout en c++ et je dois ecrire un programme qui
qui change les lettres majuscules en minuscules...Comment le faire?

10 réponses

1 2 3 4 5
Avatar
Fabien LE LEZ
On Wed, 16 Nov 2005 12:17:16 +0100, Vincent Jacques
:

mais
que developpez.com ne le connaisse pas, c'est plus embetant...


Pourquoi ? T'aurait-on fait croire que ce site contient des
informations valables ?
J'ai nettement l'impression que pour ce genre de site, l'important est
d'avoir la plus grande quantité possible de contenu. Du coup, aucune
vérification n'est effectuée.

Avatar
adebaene
Fabien LE LEZ wrote:

J'ai cru comprendre que sous Windows, Microsoft aurait tendance à
abandonner totalement les char, et d'utiliser Unicode à la place.
Ce qui, je crois, évite le problème que je citais ci-dessus.


Utiliser de l'Unicode ne résoud pas le problème en soi... il faut
spécifier aussi l'encodage (UTF16 dans le cas de Windows). Les
puristes te diront ensuite que c'est insuffisant vu que la totalité
des "code points" d'Unicode ne tiens pas sur 16 bits, mais çà c'est
un peu la faute du comité Unicode qui a changé d'avis en cours de
route .... Et puis, d'ici à ce que tu ais besoin des langages
correspondant aux codes points supérieurs à 0xffffffff dans ton
application...

Ceci-dit, ca n'a rien de nouveau : Windows utilise Unicode en interne
dans toutes les versions de NT (depuis la 3.50 jusqu'à aujourd'hui).

Pour info, les codes points unicode qui ne tiennent pas sur 16 bits :
10000..1007F; Linear B Syllabary
10080..100FF; Linear B Ideograms
10100..1013F; Aegean Numbers
10140..1018F; Ancient Greek Numbers
10300..1032F; Old Italic
10330..1034F; Gothic
10380..1039F; Ugaritic
103A0..103DF; Old Persian
10400..1044F; Deseret
10450..1047F; Shavian
10480..104AF; Osmanya
10800..1083F; Cypriot Syllabary
10A00..10A5F; Kharoshthi
1D000..1D0FF; Byzantine Musical Symbols
1D100..1D1FF; Musical Symbols
1D200..1D24F; Ancient Greek Musical Notation
1D300..1D35F; Tai Xuan Jing Symbols
1D400..1D7FF; Mathematical Alphanumeric Symbols
20000..2A6DF; CJK Unified Ideographs Extension B
2F800..2FA1F; CJK Compatibility Ideographs Supplement
E0000..E007F; Tags
E0100..E01EF; Variation Selectors Supplement
F0000..FFFFF; Supplementary Private Use Area-A
100000..10FFFF; Supplementary Private Use Area-B

Arnaud

Avatar
Yoxoman

La solution avec transform serait quelque chose du
genre :

typedef std::ctype< char >
Cvt ;
std::transform(
source.begin(), source.end(),
std::back_inserter( dest ),
std::bind1st(
std::mem_fun(
static_cast< char (Cvt::*)( char ) const >(
&Cvt::tolower ) ),
&std::use_facet< Cvt >( std::locale() ) ) ) ;

Sans oublier d'initialiser le locale global avant.


Ca me fait penser à un film : Scanners. Ca parle de gens capables de
faire exploser le cerveau d'autres presonnes à distance.

--
"Yo!"
Martin Heidegger

Avatar
Stan
"Fabien LE LEZ" a écrit dans le message de
news:
| On 16 Nov 2005 01:02:15 -0800, "kanze" :
|
| >Par exemple, donnée la
| >chaîne, "M. DUPONT M'AMENE A LA FETE D'ETE", je m'attendrais à
| >"M. Dupont m'amène à la fête d'été".
|
| Houlà !
| D'une part, ça ne répond pas à la question, puisqu'il reste des
| majuscules.
| D'autre part, tu fais de la correction orthographique : le mot "FETE"
| est incorrect ; le mot "FÊTE" (ou "fête") l'est.
| Ben oui, les accents sont obligatoires en français, même sur les
| majuscules.
|
| Enfin bon, si on sait qu'on travaille sur du texte en français (sans
| fautes d'orthographe), la conversion n'est pas trop difficile.
|
| Mais quid de l'allemand ? Si j'ai bien compris, le "ß" se transforme
| en "SS" en majuscules. Mais est-ce qu'un "SS" se transforme
| systématiquement en "ß" ?
|


Allez, encore un petit effort et on t'offre un point Godwin ;-)

--
-Stan

|
Avatar
Franck Branjonneau
Yoxoman écrivait:


La solution avec transform serait quelque chose du
genre :

typedef std::ctype< char >
Cvt ;
std::transform(
source.begin(), source.end(),
std::back_inserter( dest ),
std::bind1st(
std::mem_fun(
static_cast< char (Cvt::*)( char ) const >(
&Cvt::tolower ) ),
&std::use_facet< Cvt >( std::locale() ) ) ) ;

Sans oublier d'initialiser le locale global avant.


Ca me fait penser à un film : Scanners. Ca parle de gens capables de
faire exploser le cerveau d'autres presonnes à distance.


Si c'est le static_cast<> qui t'ennuie, tu peux l'enelever.

--
Franck Branjonneau


Avatar
Fabien LE LEZ
On Wed, 16 Nov 2005 18:39:54 +0100, "Stan" :

Allez, encore un petit effort et on t'offre un point Godwin ;-)


Un point Godwin pour avoir parlé de Sa Sainteté le pape ?
(Comment il s'appelle, au fait, le nouveau ?)

Avatar
kanze
Fabien LE LEZ wrote:
On 16 Nov 2005 01:02:15 -0800, "kanze" :

Par exemple, donnée la
chaîne, "M. DUPONT M'AMENE A LA FETE D'ETE", je m'attendrais à
"M. Dupont m'amène à la fête d'été".


Houlà !

D'une part, ça ne répond pas à la question, puisqu'il reste
des majuscules.


Mais sans les majuscules, ça ne serait pas correct.

D'autre part, tu fais de la correction orthographique : le mot
"FETE" est incorrect ; le mot "FÊTE" (ou "fête") l'est. Ben
oui, les accents sont obligatoires en français, même sur les
majuscules.


J'avais déjà dit dans un paragraphe que tu as coupé que dans un
français soigné, les majuscules prenent un accent. Seulement, si
tu entre le texte sur un clavier français, entrer des majuscules
accentées exige une certaine compétence technique. Et si le
texte a été scanné d'un vieux page dactylographié ?

Mon point, cependant, était simplement de suggérer que le
probème n'a pas été assez précisement défini. Avant de commencer
à écrire du code, j'aimerais savoir exactement ce que veut le
client. Quitte, peut-être, à lui expliquer que ses attentes ne
sont pas raisonables, comme par exemple s'il s'attend à quelque
chose comme mon exemple que tu as cité.

Enfin bon, si on sait qu'on travaille sur du texte en français
(sans fautes d'orthographe), la conversion n'est pas trop
difficile.


Si on accept des fautes d'orthographe aussi dans le résultat,
des chose comme m. dupont, par exemple. Et si on limite les
sources d'entrée pour interdire des textes dactylographiés et
d'autres.

Note bien que l'Académie est silent sur les accents sur les
majuscules. Je suis d'accord avec toi que c'est une bonne
politique, et qu'il faut les utiliser partout où c'est faisable.
Mais ce n'est pas moi qui détermine ce qui est correct en
français et ce qui ne l'est pas. Si personellement j'embauche,
et j'écarte systèmatiquement tous les candidats dont le CV
contient une majuscule sans accent, c'est mon droit, mais si mon
client insiste qu'il a des vieux textes dactylographiés qu'il
veut scanner, et qu'ils n'ont pas d'accents sur les majuscules,
c'est son droit aussi.

Mais quid de l'allemand ? Si j'ai bien compris, le "ß" se
transforme en "SS" en majuscules. Mais est-ce qu'un "SS" se
transforme systématiquement en "ß" ?


Certainement pas. Il y a Straße et Gasse. Il y a même des paires
comme Maße et Masse. (Il me semble que le Duden dit que la forme
majuscule de Maße doit être MASZE. Mais c'est une règle que je
n'ai jamais vue appliquée, et ce n'est certainement pas ce que
ferait un allemand moyen.) En général, on reconnaît tout de
suite lequel il faut d'après la prononciation, et même devant le
mot MASSE dans un texte tout en majuscule, le contexte nous
indiquera le mot voulu, et la prononciation du mot nous dirait
s'il faut utiliser ß ou ss.

À noter aussi qu'il y a eu une modification il y a peu d'années,
et la dernière fois que j'ai régardé, il y avait certains
milieux qui semblaient le réfuser -- on voyait donc dass
(correct selon la réforme) et daß (la norme avant). De même, il
y a des variants selon la région -- les règles en Suisse ne sont
pas les même qu'en Allemagne. (En Suisse, il n'y a pas de ß --
on utilise systèmatiquement ss. Mais il n'y a pas de Ä non plus,
ä devient Ae ou AE, selon qu'on convertit en « casse de titres »
ou « casse supérieur ».)

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34


Avatar
kanze
Franck Branjonneau wrote:
Yoxoman écrivait:


La solution avec transform serait quelque chose du
genre :

typedef std::ctype< char >
Cvt ;
std::transform(
source.begin(), source.end(),
std::back_inserter( dest ),
std::bind1st(
std::mem_fun(
static_cast< char (Cvt::*)( char ) const >(
&Cvt::tolower ) ),
&std::use_facet< Cvt >( std::locale() ) ) ) ;

Sans oublier d'initialiser le locale global avant.


Ca me fait penser à un film : Scanners. Ca parle de gens
capables de faire exploser le cerveau d'autres presonnes à
distance.


Si c'est le static_cast<> qui t'ennuie, tu peux l'enelever.


Tu en es sûr ? Il y a bien deux fonctions std::ctype<>::tolower,
selon la norme. C'est vrai que la deuxième prend deux
paramètres, et qu'il n'y a aucune instantiation de std::mem_fun
qui accepte l'adresse d'une fonction à deux paramètres. Mais je
ne crois pas que le compilateur soit exigé, ou même autorisé, à
faire l'analyse à ce point, selon §13.4 et §14.8.2.2. Ou
peut-être que si ; j'avoue que ce n'est pas du tout clair dans
mon ésprit.

Avec Boost, évidemment, on écrirait :

std::transform(
source.begin(), source.end(),
std::back_inserter( dest ),
boost::bind(
&Cvt::tolower,
&std::use_facet< Cvt >( std::locale() ),
_1 ) ) ;

Je crois que bind fait partie aussi de TR1.

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34



Avatar
kanze
Fabien LE LEZ wrote:
On 16 Nov 2005 01:46:10 -0800, "kanze" :

Maintenant, si tu as le caractère char(192) à convertir,
comment fais-tu ?


(Je crois que le supporte pour les locales est mieux sous
Linux.)


J'ai cru comprendre que sous Windows, Microsoft aurait
tendance à abandonner totalement les char, et d'utiliser
Unicode à la place. Ce qui, je crois, évite le problème que je
citais ci-dessus.


S'il ne supporte pas le type char, ce n'est pas du C++. Sinon,
c'est vrai que les wchar_t risque de fonctionner mieux pour ce
cas précis. Mais avec les wchar_t, tu vas aussi avoir des u0153
(le oe écrit comme un seul caractère), qui donne de nouveau un
comportement indéfini au tolower de <ctype.h>.

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34



Avatar
kanze
wrote:
Fabien LE LEZ wrote:

J'ai cru comprendre que sous Windows, Microsoft aurait
tendance à abandonner totalement les char, et d'utiliser
Unicode à la place. Ce qui, je crois, évite le problème que
je citais ci-dessus.


Utiliser de l'Unicode ne résoud pas le problème en soi... il
faut spécifier aussi l'encodage (UTF16 dans le cas de
Windows). Les puristes te diront ensuite que c'est insuffisant
vu que la totalité des "code points" d'Unicode ne tiens pas
sur 16 bits, mais çà c'est un peu la faute du comité Unicode
qui a changé d'avis en cours de route .... Et puis, d'ici à ce
que tu ais besoin des langages correspondant aux codes points
supérieurs à 0xffffffff dans ton application...


Si ton application ne connait que le français, ISO 8859-15, sur
un octet, suffit largement. Si ton application se veut
internationale, c-à-d qu'elle prétend supporter le chinois...

La raison principale pourquoi Unicode a dépassé les seize bits,
c'est qu'on s'est aperçu que les caractères chinois fournis par
les 16 bits ne suffisaient en fait pas en fait.

[...]
20000..2A6DF; CJK Unified Ideographs Extension B
2F800..2FA1F; CJK Compatibility Ideographs Supplement


Les caractères dans les Unified Ideographs Extension B sont
aussi nécessaire au chinois que les caractères accentués sont au
français. (Au moins selon un ami chinois. Personellement, je
trouvais qu'il y en avait déjà trop avant:-).)

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34


1 2 3 4 5