Frage

Was ist der beste Weg, den Leuten zu tun Zeichenfolge in Kleinbuchstaben groß - / Kleinschreibung in C++?

Das Problem wird komplizierter durch die Tatsache, dass C++ nicht nur Englisch Programmiersprache.Ist es eine gute Mehrsprachige Methode?

War es hilfreich?

Lösung

#include <algorithm>
std::string data = "Abc";
std::transform(data.begin(), data.end(), data.begin(), ::toupper);

http://notfaq.wordpress.com/2007/08/04/cc-convert-string-to-upperlower-case/

Auch CodeProject-Artikel für gängige string-Methoden: http://www.codeproject.com/KB/stl/STL_string_util.aspx

Andere Tipps

> std::string data = “Abc”; 
> std::transform(data.begin(), data.end(), data.begin(), ::toupper);

Dies funktioniert, aber dies wird mit den standard - "C" - locale.Sie können die Verwendung von Facetten, wenn Sie brauchen, um ein tolower für ein anderes Gebietsschema.Der obige code mithilfe von Facetten wäre:

locale loc("");
const ctype<char>& ct = use_facet<ctype<char> >(loc);
transform(str.begin(), str.end(), std::bind1st(std::mem_fun(&ctype<char>::tolower), &ct));

Zum kopieren-rollenwechslern in der Hoffnung Nic Starke Antwort, Hinweis: der Rechtschreibfehler in "use_factet" und der Dritte parameter fehlt, um std::transform:

locale loc("");
const ctype<char>& ct = use_factet<ctype<char> >(loc);
transform(str.begin(), str.end(), std::bind1st(std::mem_fun(&ctype<char>::tolower), &ct));

sollte

locale loc("");
const ctype<char>& ct = use_facet<ctype<char> >(loc);
transform(str.begin(), str.end(), str.begin(), std::bind1st(std::mem_fun(&ctype<char>::tolower), &ct));

Sie sollten auch überprüfen, diese Frage.Im Grunde ist das problem, dass die standard-C/C++ - Bibliotheken wurden nicht gebaut, um die Verarbeitung von Unicode-Daten, so dass Sie werden sehen, zu anderen Bibliotheken.

Dies könnte sich ändern, wie der C++ - standard aktualisiert wird.Ich weiß, der nächste compiler von Borland (CodeGear) wird Unicode unterstützt, und ich denke, Microsoft C++ - compiler haben, oder bereits über die string-Bibliotheken, die Unicode unterstützen.

Als Darren sagte Sie, die einfachste Methode ist die Verwendung von std::transform.

Aber Vorsicht, in einigen Sprachen, wie Deutsch zum Beispiel, gibt es nicht immer eine eins-zu-eins-Zuordnung zwischen unter-und Großbuchstaben.Die "esset" Kleinbuchstaben (sehen aus wie die griechischen Buchstaben beta) umgewandelt wird zu "SS" in Großbuchstaben.

Wenn Sie haben zu Steigern, dann ist es der einfachste Weg.Haben Sie einen Blick auf to_upper()/to_lower() in Boost-string-algorithmen.

Ich habe einen Weg gefunden, zu konvertieren Falle von unicode (und mehrsprachig) Zeichen, aber Sie müssen wissen,/finden (irgendwie) das Gebietsschema des Charakters:

#include <locale.h>

_locale_t locale = _create_locale(LC_CTYPE, "Greek");
AfxMessageBox((CString)""+(TCHAR)_totupper_l(_T('α'), locale));
_free_locale(locale);

Ich habe keinen Weg gefunden, das zu tun, aber...Ich weiß jemand, wie, lassen Sie mich wissen.

Gebietsschema auf NULL funktioniert nicht...

Die VCL hat ein SysUtils.hpp die LowerCase(unicodeStringVar) und UpperCase(unicodeStringVar) die möglicherweise für Sie arbeiten.Ich benutze dies in C++ Builder 2009.

Was Steve sagt, ist richtig, aber ich denke, dass, wenn Ihr code hatte, um Unterstützung für mehrere Sprachen, könnten Sie eine factory-Methode, die beinhaltet eine Reihe von Methoden, die die relevanten toUpper und toLower basiert auf dieser Sprache.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top