Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[Debutant] String.tolower()

5 réponses
Avatar
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

5 réponses

Avatar
Cyrille
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!

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


Avatar
Fabien LE LEZ
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 : <http://perso.edulang.com/philo/>

Avatar
James Kanze
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


Avatar
Fabien LE LEZ
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 : <http://perso.edulang.com/philo/>