[Debutant] String.tolower()

Le
Bruno CAUSSE
Je suis un peu étonné, il existe une methode std::tolower
Mais pas de méthode string::tolower() ?

Ne manquent t'elles pas (avec sa consoeur touuper()) ?
--
Bruno
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Cyrille
Le #246874
Je suis un peu étonné, il existe une methode std::tolower
Mais pas de méthode string::tolower() ?

Ne manquent t'elles pas (avec sa consoeur touuper()) ?


std::string str = "HeLlO";
std::transform(str.begin(), str.end(), str.begin(), std::tolower);

ou encore
boost::to_lower(str);
(http://www.boost.org/doc/html/string_algo.html)

--
win the yes need the no to win against the no!

kanze
Le #246830
Cyrille wrote:
Je suis un peu étonné, il existe une methode std::tolower
Mais pas de méthode string::tolower() ?



Et qu'est-ce qu'elle doit faire, cette fonction ? Le problème
est plus ardu que tu ne crois.

Ne manquent t'elles pas (avec sa consoeur toupper()) ?


std::string str = "HeLlO";
std::transform(str.begin(), str.end(), str.begin(), std::tolower);


Si par hazard ça compile, ça donne un fonctionnement indéfini.
Et en général il ne marche réelement pas.

En principe, on pourrait écrire quelque chose du genre :
std::transform(
s.begin(), s.end(),
s.begin(),
std::bind2nd(
std::ptr_fun(
static_cast< char (*)(char, std::locale const& ) >(
std::toupper ) ),
std::locale() ) ) ;
mais std::toupper prend une référence, et on finit ainsi avec
une référence a une référence, qui est illégale, au moins pour
l'instant.

Côté Boost, je crois qu'il y a quelque chose qui permettrait
d'écrire quelque chose comme :
std::transform(
s.begin(), s.end(),
s.begin(),
boost::bind( std::toupper( _1, std::locale() ) ) ) ;
mais je ne l'ai pas vérifieé. C'est quand même ce qui me paraît
le mieux.

ou encore
boost::to_lower(str);
(http://www.boost.org/doc/html/string_algo.html)


Et évidemment, aucune des solutions proposées sait traiter le
'ß' allemand correctement:-).

--
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


Fabien LE LEZ
Le #246827
On 13 May 2005 09:15:32 -0700, :

Et évidemment, aucune des solutions proposées sait traiter le
'ß' allemand correctement:-).


D'un autre côté, moi non plus, donc si ça fait n'importe quoi, ça ne
me dérange pas ;-)

--
Le grand site de la philosophie animale :
James Kanze
Le #246715
Fabien LE LEZ wrote:
On 13 May 2005 09:15:32 -0700, :


Et évidemment, aucune des solutions proposées sait traiter le
'ß' allemand correctement:-).



D'un autre côté, moi non plus, donc si ça fait n'importe quoi,
ça ne me dérange pas ;-)


Toi, peut-être pas, mais tes clients ?

Tout dépend du cahier de charge, mais les conversions entre les
majuscules et les minuscules ne vont pas toujours de soi. Si
l'internationalisation est vraiment démandé, il faudra régarder
tous les rapports chez Unicode, et prévoir pas mal de boulot.
S'il ne s'agit que d'ignorer la case pour un langage de
programmation qui ne permet que des 26 lettres de base, en
revanche, c'est prèsque trivial. Entre les deux...

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


Fabien LE LEZ
Le #246587
On Sun, 15 May 2005 23:30:10 +0200, James Kanze :

Tout dépend du cahier de charge


Pour l'instant, les deux seules langues que je dois gérer sont le
français et l'anglais. Je pourrai commencer à flipper dès que ça
s'étendra au russe et à l'allemand ;-)

--
Le grand site de la philosophie animale :
Publicité
Poster une réponse
Anonyme