 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Tobias Wollgam Guest
|
Posted: Wed Dec 10, 2003 4:57 pm Post subject: case insensitive string |
|
|
Hallo.
Ich hätte gerne eine String-Klasse, die sich case insensitive verhält.
Dafür sehe ich erstens die Möglichkeit istring von std:string abzuleiten und
Konstruktoren und Vergleichsfunktionen/-operatoren zu erstellen. Oder man
definiert sich einen neuen Typen wie z.B.:
typedef basic_string <char,ichar_traits istring
Die 1. Lösung ist einfach und funktioniert.
Die 2. Lösung ist aber schöner, macht aber gewisse Schwierigkeiten. Hat
jemand eine Lösung dafür?
TIA,
Tobias
--
Tobias Wollgam * Softwaredevelopment * Business Unit Information
MATERNA GmbH Information & Communications
Vosskuhle 37 * 44141 Dortmund
http://www.materna.de
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Daniel Albuschat Guest
|
Posted: Thu Dec 11, 2003 2:48 pm Post subject: Re: case insensitive string |
|
|
Tobias Wollgam wrote:
| Quote: | Hallo.
Ich hätte gerne eine String-Klasse, die sich case insensitive verhält.
Dafür sehe ich erstens die Möglichkeit istring von std:string abzuleiten und
Konstruktoren und Vergleichsfunktionen/-operatoren zu erstellen. Oder man
definiert sich einen neuen Typen wie z.B.:
typedef basic_string <char,ichar_traits istring
Die 1. Lösung ist einfach und funktioniert.
|
std::string hat keinen virtuellen Destruktor, was impliziert, dass
man davon nicht ableiten sollte. Das wurde aber in einem Thread von
vor ein paar Tagen genauer besprochen.
| Quote: | Die 2. Lösung ist aber schöner, macht aber gewisse Schwierigkeiten. Hat
jemand eine Lösung dafür?
|
Ja. Google z.B.
Dazu habe ich vor nicht allzu langer Zeit einen Post hier verfasst...
siehe
http://groups.google.com/groups?th=dd7f240f7b49c2aa&seekm=m2k76qh7oy.fsf%40madbox2.local
Das Einzige, was du da machen muesstest, waere glaube ich compare, eq,
eq_int_type, lt und find anders zu machen.
Zum Thema Lokalisierung und casinsensitive string findest du in dieser
Gruppe auch einige Beitraege... die meisten enden soweit ich weiss so,
dass es eh nicht geht.
cu,
Daniel
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Rolf Magnus Guest
|
Posted: Thu Dec 11, 2003 4:17 pm Post subject: Re: case insensitive string |
|
|
Daniel Albuschat wrote:
| Quote: | Tobias Wollgam wrote:
Hallo.
Ich hätte gerne eine String-Klasse, die sich case insensitive
verhält.
Dafür sehe ich erstens die Möglichkeit istring von std:string
abzuleiten und Konstruktoren und Vergleichsfunktionen/-operatoren zu
erstellen. Oder man definiert sich einen neuen Typen wie z.B.:
typedef basic_string <char,ichar_traits
istring
Die 1. Lösung ist einfach und funktioniert.
std::string hat keinen virtuellen Destruktor, was impliziert, dass
man davon nicht ableiten sollte. Das wurde aber in einem Thread von
vor ein paar Tagen genauer besprochen.
|
Ja, es wurde besprochen, und da war das nicht die einzige Meinung. Ich
sage "Meinung", da es deine Meinung ist, daß ein nichtvirtueller
Destruktor irgendetwas impliziert.
Fakt ist aber: Solange man keine polymorphe Zerstörung des Objekts
braucht (Meine Meinung: Die braucht man bei Strings auch nicht), ist es
egal, ob der Destruktor virtuell ist oder nicht.
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Falk Tannhäuser Guest
|
Posted: Thu Dec 11, 2003 6:49 pm Post subject: Re: case insensitive string |
|
|
Rolf Magnus wrote:
| Quote: |
Daniel Albuschat wrote:
Tobias Wollgam wrote:
Hallo.
Ich hätte gerne eine String-Klasse, die sich case insensitive
verhält.
Dafür sehe ich erstens die Möglichkeit istring von std:string
abzuleiten und Konstruktoren und Vergleichsfunktionen/-operatoren zu
erstellen. Oder man definiert sich einen neuen Typen wie z.B.:
typedef basic_string <char,ichar_traits
istring
Die 1. Lösung ist einfach und funktioniert.
std::string hat keinen virtuellen Destruktor, was impliziert, dass
man davon nicht ableiten sollte. Das wurde aber in einem Thread von
vor ein paar Tagen genauer besprochen.
Ja, es wurde besprochen, und da war das nicht die einzige Meinung. Ich
sage "Meinung", da es deine Meinung ist, daß ein nichtvirtueller
Destruktor irgendetwas impliziert.
Fakt ist aber: Solange man keine polymorphe Zerstörung des Objekts
braucht (Meine Meinung: Die braucht man bei Strings auch nicht), ist es
egal, ob der Destruktor virtuell ist oder nicht.
Die anderen Member-Funktionen von std::string sind allerdings auch nicht |
virtuell. Man kann zwar in der abgeleiteten Klasse alle Versionen von
'compare', 'find', 'rfind', 'find_.*_of' überschreiben, sowie ==, !=,
<, >, <=, >= überladen; doch werden diese nicht mehr aufgerufen, sobald
man die istring-Objekte per Referenz / Zeiger auf std::string manipuliert.
Um daraus resultierende Problemchen zu vermeiden, sollte man m.E. die
Vererbung privat machen.
MfG
Falk
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Ludwig Pumberger Guest
|
Posted: Thu Dec 11, 2003 7:49 pm Post subject: Re: case insensitive string |
|
|
Falk Tannhäuser schrieb:
| Quote: | Ja, es wurde besprochen, und da war das nicht die einzige Meinung. Ich
sage "Meinung", da es deine Meinung ist, daß ein nichtvirtueller
Destruktor irgendetwas impliziert.
Fakt ist aber: Solange man keine polymorphe Zerstörung des Objekts
braucht (Meine Meinung: Die braucht man bei Strings auch nicht), ist es
egal, ob der Destruktor virtuell ist oder nicht.
Die anderen Member-Funktionen von std::string sind allerdings auch nicht
virtuell. Man kann zwar in der abgeleiteten Klasse alle Versionen von
'compare', 'find', 'rfind', 'find_.*_of' überschreiben, sowie ==, !=,
, >, <=, >= überladen; doch werden diese nicht mehr aufgerufen, sobald
man die istring-Objekte per Referenz / Zeiger auf std::string
manipuliert.
Um daraus resultierende Problemchen zu vermeiden, sollte man m.E. die
Vererbung privat machen.
|
Das Hauptproblem ist dass manche Methoden eine Referenz auf std::string
liefern und die müsste man alle überschreiben damit sich die Klasse wie
gewünscht verhält. Ich würde eher my_char_traits von std::char_traits
ableiten und nur die bereits erwähnten Methoden überschreiben. Das ist IMO
(genauso wie z.B. std::iterator) eine Klasse die nicht virtuell und
trotzdem ableitbar ist. Von std::string abzuleiten halte ich dagegen für
eine weniger gute Idee.
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Thomas Maeder Guest
|
Posted: Sun Dec 14, 2003 6:50 pm Post subject: Re: case insensitive string |
|
|
Tobias Wollgam <tobias.wollgam (AT) materna (DOT) de> writes:
| Quote: | Ich hätte gerne eine String-Klasse, die sich case insensitive verhält.
|
Was bedeutet das?
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Tobias Wollgam Guest
|
Posted: Mon Dec 15, 2003 9:13 am Post subject: Re: case insensitive string |
|
|
Thomas Maeder wrote:
| Quote: | Tobias Wollgam <tobias.wollgam (AT) materna (DOT) de> writes:
Ich hätte gerne eine String-Klasse, die sich case insensitive verhält.
Was bedeutet das?
|
Das bedeutet, daß beim Vergleichen zweier Strings nicht zwischen Groß- und
Kleinschreibung unterschieden wird.
Meine nun favorisierte Lösung sieht so aus:
struct ichar_traits : public char_traits<char>
{ ... };
typedef basic_string<char,ichar_traits,allocator _istring;
class istring : public _istring
{ ... };
und entsprechende externe Operatoren.
Gruß,
Tobias
--
Tobias Wollgam * Softwaredevelopment * Business Unit Information
MATERNA GmbH Information & Communications
Vosskuhle 37 * 44141 Dortmund
http://www.materna.de
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
André Pönitz Guest
|
Posted: Mon Dec 15, 2003 10:59 am Post subject: Re: case insensitive string |
|
|
Thomas Maeder <maeder (AT) glue (DOT) ch> wrote:
| Quote: | Tobias Wollgam <tobias.wollgam (AT) materna (DOT) de> writes:
Ich hätte gerne eine String-Klasse, die sich case insensitive verhält.
Was bedeutet das?
|
Er will, dass sich 'h' wie 'H' und 'i' wie 'I mit Punkt, aber nicht wie
I', 'ß' meist wie 'SS' und manchmal wie 'SZ' und 'ö' wie 'Ö' und bei
Vollmond wie 'Oe' verhaelt.
Andre'
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Thomas Maeder Guest
|
Posted: Mon Dec 15, 2003 7:02 pm Post subject: Re: case insensitive string |
|
|
Tobias Wollgam <tobias.wollgam (AT) materna (DOT) de> writes:
| Quote: | Das bedeutet, daß beim Vergleichen zweier Strings nicht zwischen Groß- und
Kleinschreibung unterschieden wird.
|
Dann würde ich dieses Verhalten in einer separaten Funktion implementieren,
welche die folgende Deklaration hätte:
bool compare_case_insensitive(std::string const &, std::string const &);
Oder auch nicht, denn ich habe nicht die geringste Ahnung, wie man das
korrekt implementiert. Und ich behaupte einfach mal, Du auch nicht.
| Quote: | Meine nun favorisierte Lösung sieht so aus:
struct ichar_traits : public char_traits<char
{ ... };
typedef basic_string _istring;
class istring : public _istring
{ ... };
und entsprechende externe Operatoren.
Gruß,
|
Siehst Du, schon Dein eigener Post macht Schwierigkeiten :-)
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Tobias Wollgam Guest
|
Posted: Tue Dec 16, 2003 8:43 am Post subject: Re: case insensitive string |
|
|
Thomas Maeder wrote:
| Quote: | Oder auch nicht, denn ich habe nicht die geringste Ahnung, wie man das
korrekt implementiert. Und ich behaupte einfach mal, Du auch nicht.
|
Richtig, Du behauptest einfach mal. Das zeigt, daß Du tatsächlich keine
Ahnung hast und scheinbar einfach nur irgend was schreiben möchtest. Warum
schreibst Du dann nicht einfach Gedichte oder so?
| Quote: | Meine nun favorisierte Lösung sieht so aus:
|
[Zusammenfassung meiner Lösung]
| Quote: | Siehst Du, schon Dein eigener Post macht Schwierigkeiten
|
Ne, seh ich nicht. Was macht Schwierigkeiten? Die Abstraktion meiner
Zusammenfassung? Die Implementierung jedenfalls funktioniert, so wie
gewollt! Die Zusammenfassung war für diejenigen, die es interessiert. Wer
irgendwas konkreter haben möchte, darf mich fragen.
Jedenfalls verwirrt mich Dein Reply, ich suche noch den Sinn ...
Gruß,
Tobias
--
Tobias Wollgam * Softwaredevelopment * Business Unit Information
MATERNA GmbH Information & Communications
Vosskuhle 37 * 44141 Dortmund
http://www.materna.de
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Falk Tannhäuser Guest
|
Posted: Tue Dec 16, 2003 10:55 am Post subject: Re: case insensitive string |
|
|
Tobias Wollgam wrote:
| Quote: |
Thomas Maeder wrote:
[Zusammenfassung meiner Lösung]
Siehst Du, schon Dein eigener Post macht Schwierigkeiten :-)
Ne, seh ich nicht. Was macht Schwierigkeiten? Die Abstraktion meiner
Zusammenfassung? Die Implementierung jedenfalls funktioniert, so wie
gewollt! Die Zusammenfassung war für diejenigen, die es interessiert. Wer
irgendwas konkreter haben möchte, darf mich fragen.
Es kommt drauf an, wie gut die Lösung funktionieren soll. |
Wenn man z.B. 'ß' korrekt behandeln will, haben zwei "case insensitive"
gleiche Zeichenketten nicht mal unbedingt die gleiche Länge ("DER PREIS
IST HEISS"), wie bereits André Pönitz gestern erwähnte. Ich sehe nicht,
wie dies mittels Redefinition von "char_traits" zu [bp]acken wäre...
Wenn die Anwendung natürlich trotz einer nicht 100%ig perfekten Lösung
akzepabel ist, kann man vielleicht mit der erwähnten Lösung leben.
Falk
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Olaf Krzikalla Guest
|
Posted: Tue Dec 16, 2003 12:33 pm Post subject: Re: case insensitive string |
|
|
Hi,
Tobias Wollgam wrote:
| Quote: |
Thomas Maeder wrote:
Oder auch nicht, denn ich habe nicht die geringste Ahnung, wie man das
korrekt implementiert. Und ich behaupte einfach mal, Du auch nicht.
Richtig, Du behauptest einfach mal. Das zeigt, daß Du tatsächlich keine
Ahnung hast und scheinbar einfach nur irgend was schreiben möchtest. Warum
schreibst Du dann nicht einfach Gedichte oder so?
Aus einem einfachen Grund: Thomas schreibt gerne Wahrheiten - und da |
oben hat er eine geschrieben - im Ggs. zu Deiner Entgleisung.
| Quote: | Gruß,
Siehst Du, schon Dein eigener Post macht Schwierigkeiten :-)
Ne, seh ich nicht. Was macht Schwierigkeiten? Die Abstraktion meiner
Zusammenfassung?
Hier machst Du es sogar richtg: wenn man etwas nicht versteht, dann |
fragt man nach und geht den Anderen nicht gleich persönlich an. Ich gebe
zu, dass der hier gepflegte minimalistische Antwortstil nicht immer den
Geschmack eines neu Hinzugekommenen trifft, aber
1. das hier ist eben eine technische Newsgroup
2. viele Fragen werden hier alle 4-8 Wochen neu gestellt.
Was nun Deine letzte Frage angeht: Ich habe mal zu dem automatischen
Zitat noch von Hand ein Wort aus Deinem vorletzten Posting dazugefügt -
denn nur in diesem Kontext macht Thomas' Bemerkung einen Sinn.
MfG
Olaf Krzikalla
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Tobias Wollgam Guest
|
Posted: Tue Dec 16, 2003 6:25 pm Post subject: Re: case insensitive string |
|
|
Hallo.
Olaf Krzikalla wrote:
| Quote: | Oder auch nicht, denn ich habe nicht die geringste Ahnung, wie man das
korrekt implementiert. Und ich behaupte einfach mal, Du auch nicht.
Richtig, Du behauptest einfach mal. Das zeigt, daß Du tatsächlich keine
Ahnung hast und scheinbar einfach nur irgend was schreiben möchtest.
Warum schreibst Du dann nicht einfach Gedichte oder so?
Aus einem einfachen Grund: Thomas schreibt gerne Wahrheiten - und da
oben hat er eine geschrieben - im Ggs. zu Deiner Entgleisung.
|
Falsch, das war keine Wahrheit, sondern eine Behauptung und die ist falsch.
Thomas geht wahrscheinlich von dem ss <-> ß Problem aus. Diese Komplexität
war jedoch an keiner Stelle gefordert. Da ich den entsprecheden Thread von
vor 6 Wochen nicht kannte, relativiert das meine 'Entgleisung' ziemlich.
Wer kommt sich nicht veralbert vor, wenn auf eine Frage nach einem Auto
jemand mit Flugzeug antwortet?
| Quote: | Ne, seh ich nicht. Was macht Schwierigkeiten? Die Abstraktion meiner
Zusammenfassung?
Hier machst Du es sogar richtg: wenn man etwas nicht versteht, dann
fragt man nach und geht den Anderen nicht gleich persönlich an.
|
Vielleich sollte man das auch nicht provozieren, indem man plötzlich
grundlos Zusammenhänge zu anderen Threads erzeugt, die mit dem eigentlichen
Problem nichts zu tun haben. Meine Fragen hatten nicht irgendwelche
lexikalischen Analysen zum Inhalt, sondern waren rein C++- bzw.
STL-bezogen.
| Quote: | Ich gebe
zu, dass der hier gepflegte minimalistische Antwortstil nicht immer den
Geschmack eines neu Hinzugekommenen trifft, aber
1. das hier ist eben eine technische Newsgroup
2. viele Fragen werden hier alle 4-8 Wochen neu gestellt.
|
1. War seine Aussage aus meiner Sicht nicht technischer Natur, da ich nicht
hellsehen kann
2. Ok, ich habe zu dem Thema nur Google befragt, aber nicht die Groups von
Google. Das ist mir allerdings erst nach abschicken der News aufgefallen.
Und ich bin auch mit Hinweisen zufrieden, der Art, daß das Thema schon vor
geraumer Zeit durchgekaut wurde. Ich kenne Thomas nicht und ich kann bei
bestem Willen keinen Hinweiß darauf sehen.
| Quote: | Was nun Deine letzte Frage angeht: Ich habe mal zu dem automatischen
Zitat noch von Hand ein Wort aus Deinem vorletzten Posting dazugefügt -
denn nur in diesem Kontext macht Thomas' Bemerkung einen Sinn.
|
Versteh ich auch nicht? Was hab ich nun übersehen?
TIA, Tobias
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Thomas Maeder Guest
|
Posted: Tue Dec 16, 2003 6:27 pm Post subject: Re: case insensitive string |
|
|
Tobias Wollgam <tobias.wollgam (AT) materna (DOT) de> writes:
| Quote: | Thomas Maeder wrote:
Oder auch nicht, denn ich habe nicht die geringste Ahnung, wie man das
korrekt implementiert. Und ich behaupte einfach mal, Du auch nicht.
Richtig, Du behauptest einfach mal. Das zeigt, daß Du tatsächlich keine
Ahnung hast und scheinbar einfach nur irgend was schreiben möchtest. Warum
schreibst Du dann nicht einfach Gedichte oder so?
|
Ich hatte eigentlich keine persönlichen Angriff vor, als ich obiges schrieb.
Das Thema "case insensitive string" ist halt schon so oft diskutiert worden
(mit diversen Falschlösungen).
| Quote: | Jedenfalls verwirrt mich Dein Reply, ich suche noch den Sinn ...
|
Ok.
Die Zeichenketten "Maße" und "MASSE" sind abgesehen vom "case" gleich oder
auch nicht, je nachdem was "MASSE" bedeutet.
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Tobias Wollgam Guest
|
Posted: Tue Dec 16, 2003 6:51 pm Post subject: Re: case insensitive string |
|
|
Hallo
| Quote: | Oder auch nicht, denn ich habe nicht die geringste Ahnung, wie man das
korrekt implementiert. Und ich behaupte einfach mal, Du auch nicht.
Richtig, Du behauptest einfach mal. Das zeigt, daß Du tatsächlich keine
Ahnung hast und scheinbar einfach nur irgend was schreiben möchtest.
Warum schreibst Du dann nicht einfach Gedichte oder so?
Ich hatte eigentlich keine persönlichen Angriff vor, als ich obiges
schrieb. Das Thema "case insensitive string" ist halt schon so oft
diskutiert worden (mit diversen Falschlösungen).
|
Tut mir leid, ich konnte diesen Zusammenhang leider nicht herstellen, sonst
hätte ich das nicht geschrieben. (Ich sollte wohl auch nicht immer so
impulsiv reagieren)
| Quote: | Jedenfalls verwirrt mich Dein Reply, ich suche noch den Sinn ...
Ok.
Die Zeichenketten "Maße" und "MASSE" sind abgesehen vom "case" gleich oder
auch nicht, je nachdem was "MASSE" bedeutet.
|
Ja, diese Problematik habe ich mir bereits angesehen. Sehr interessanter
Thread. Jedoch war das nicht das Problem, sondern die Umsetzung von
stringicmp in C++ auf der Basis von std::string. Ich dachte, daß ich mich
dahingehend deutlich genug ausgedrückt hatte.
mfg, Tobias
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|