C ++ 11 Groß-und Kleinschreibung Vergleich der Anfang einer Zeichenfolge (Unicode)

8

Ich muss prüfen, ob die bestimmte Zeichenfolge mit einer anderen Zeichenfolge beginnt. Zeichenfolgen werden mit utf8 codiert, und bei einem Vergleich sollte die Groß- / Kleinschreibung nicht beachtet werden.

Ich weiß, dass dies dem Thema sehr ähnlich ist Groß- und Kleinschreibung in String-Vergleich in C ++ < Ich möchte aber die Boost-Bibliothek nicht verwenden und bevorzuge portable Lösungen (Wenn es "fast" unmöglich ist, bevorzuge ich Linux-orientierte Lösungen).

Ist es in C ++ 11 möglich, seine regexp-Bibliothek zu verwenden? Oder einfach einfache String-Vergleichsmethoden verwenden?

    
Dejwi 04.05.2012, 07:25
quelle

3 Antworten

12

Das einzige, was ich davon weiß, ist UTF8 / Internationalisierung / Kulturbewusstsein ist die ausgezeichnete und gepflegte IBM ICU: Internationale Komponenten für Unicode Es ist eine C / C ++ - Bibliothek für * nix oder Windows, in die eine Menge Forschung investiert hat, um eine Kultur-bewusste Zeichenketten-Bibliothek bereitzustellen, einschließlich eines Vergleiches von Groß- und Kleinschreibung, der sowohl schnell als auch genau ist.

IMHO, die zwei Dinge, die Sie niemals selbst schreiben sollten, wenn Sie nicht gerade eine Diplomarbeit machen, sind Verschlüsselung und kultursensitive String-Bibliotheken.

    
Mahmoud Al-Qudsi 04.05.2012 07:38
quelle
3

Gibt es Einschränkungen hinsichtlich der Zeichenfolge, die Sie suchen? zum? Es ist Benutzereingaben und kann jede UTF-8-Zeichenfolge sein, das Problem ist sehr komplex. Wie andere schon erwähnt haben, kann ein Charakter haben mehrere verschiedene Darstellungen, also müssten Sie sich wahrscheinlich normalisieren die Saiten zuerst. Dann: Was gilt als gleichwertig? Sollte 'E' vergleichen gleich 'é' (wie in einigen Kreisen in Französisch üblich) oder nicht (was würde den "offiziellen" Regeln der Imprimerie nationale entsprechen.

Für alle außer den trivialsten Definitionen, rollen Sie Ihren eigenen Willen einen erheblichen Aufwand darstellen. Für diese Art von Sache, die Bibliothek ICU ist die Referenz. Es enthält alles, was Sie brauchen. Beachten Sie jedoch das Es funktioniert auf UTF16, nicht UTF8, also müssen Sie die Strings konvertieren erstens, sowie sie zu normalisieren. (ICU hat Unterstützung für beide.)

    
James Kanze 04.05.2012 08:02
quelle
2

Mit den stl regex-Klassen könntest du so etwas wie das folgende Snippet machen. Leider ist es nicht utf8. Das Ändern von str2 in std::wstring str2 = L"hello World" führt zu vielen Konvertierungswarnungen. Making str1 an std::wchar funktioniert überhaupt nicht, da std :: regex keine whar-Eingabe erlaubt (soweit ich sehen kann).

%Vor%     
AquilaRapax 04.05.2012 07:57
quelle

Tags und Links