Großschreibung?



  • Optimizer schrieb:

    volkard schrieb:

    würde mich stören, wenn tolower(toupper(s))!=tolower(s)

    Bitte? Was erwartest du den bei "Bauernsepp".toUpper().toLower(); ? Ich erwarte "bauernsepp". Wenn du jetzt wieder "Bauernsepp" erwartest, muss ich dich leider enttäuschen: Das sind keine reversiblen Operationen und das war auch nie so gedacht. Komsiche Vorstellung, sorry...

    lies nochmal die ungleichung.
    da hab ich nicht irgendwas von reversibel gefordert.
    tolower(toupper("Bauernsepp"))=="bauensepp"
    und
    tolower("Bauernsepp")=="bauernsepp"

    um genau zu sein, erwartet jeder bauernsepp, daß bei der aussage "wir verwalten die nachnamen in der kundendatenbank nur in grossbuchstaben" und "die da verwalten die nachnamen nur ein kleinbuchstaben", daß ich einen herrn Bauersepp, der in unserer db gelandet ist auch in deren finde und daß ein herr bauernsepp, der in deren db gelandet ist auch in unserer findbar ist. und zwar indem ich den unseren datensatz einfach tolower rechne oder deren einfach toupper.
    das ist das erwartete verhalten. aber mit ß->SS klappt das nicht mehr zuverlässig, weil die leute mit der großschrift-datenbank bei herrn "Scheißer" nur "SCHEISSER" gespeicher haben und in der fremd-db nach "scheisser" und nach "scheißer" suchen müßten. und das ist sch., wie ich finde.



  • Optimizer schrieb:

    Bitte schlagt euch jetzt endlich

    tolower(toupper(s)) == tolower(s)
    

    aus dem Kopf. Das ist Blödsinn.

    mein iq liegt über 60 und ich nahm nie an, daß tolower(toupper(x))==x. ich sprach von tolower(toupper(x))==tolower(x).



  • rofl. 🤡

    Das ist aber einfach ein Problem der deutschen Sprache. Es gibt nun mal kein großes scharfes s, bzw. das große 'ß' ist halt eben SS. Du sagst, du forderst keine Umkehrbarkeit, mit deiner Datenbank forderst du es aber dennoch, wenn auch in einem einfacheren Fall.
    Eine Datenbank muss nun mal klug genug sein, um nach dem Herrn scheisser und nach scheißer gleichzeitig zu suchen. Wenn die Datenbank ein bissl Grips hat, findet sie den Typen auch noch, wenn ich "ScheISser" eingebe.

    Wenn ich einmal toLower() oder toUpper() angewandt habe, sind mir möglicherweise Informationen verloren gegangen. Das lässt sich nicht ändern, wenn diese Funktion der Sprache/dem Locale entsprechend korrekt arbeiten soll. Jeder, der sowas benutzt, muss das in Kauf nehmen. Man könnte natürlich auch die Datenbank einfach alles pauschal klein und immer mit 'ss' statt 'ß' speichern lassen, wo dann auch bei der Suchanfrage entsprechend aufgelöst wird.

    volkard schrieb:

    Optimizer schrieb:

    Bitte schlagt euch jetzt endlich

    tolower(toupper(s)) == tolower(s)
    

    aus dem Kopf. Das ist Blödsinn.

    mein iq liegt über 60 und ich nahm nie an, daß tolower(toupper(x))==x. ich sprach von tolower(toupper(x))==tolower(x).

    Sorry, da hab ich mich wirklcih verguckt. 🙂 So wie ich es vorhin geschrieben habe, gab es das Thema nämlich auch schon mal.



  • Ganz abgesehen davon ist

    tolower("Bauernsepp")
    

    ziemlicher Blödsinn, weil tolower ein Zeichen und keinen String erwartet.



  • Und noch eins - ß nach SS umzuwandeln, kann sinnentstellend sein. Nimm zum Beispiel:

    char *toupper_string(char*) { ... }
    
    puts(toupper_string("Trinkt in Maßen!"));
    


  • 0xdeadbeef schrieb:

    Ganz abgesehen davon ist

    tolower("Bauernsepp")
    

    ziemlicher Blödsinn, weil tolower ein Zeichen und keinen String erwartet.

    Ah, und deshalb kann es kein "tolower(const char* str)" geben, oder?



  • 0xdeadbeef schrieb:

    Und noch eins - ß nach SS umzuwandeln, kann sinnentstellend sein. Nimm zum Beispiel:

    char *toupper_string(char*) { ... }
    
    puts(toupper_string("Trinkt in Maßen!"));
    

    Schön. Wir können darüber jetzt noch 1000 Stunden diskutieren. Fakt ist nun mal, dass es so ist ( http://aspell.net/devel-doc/man/German-Sharp-S.html )
    In manchen Fällen wird man es zur Vereinfachung halt einfach anders handhaben.



  • 0xdeadbeef schrieb:

    Und noch eins - ß nach SS umzuwandeln, kann sinnentstellend sein. Nimm zum Beispiel:

    char *toupper_string(char*) { ... }
    
    puts(toupper_string("Trinkt in Maßen!"));
    

    Das hat auch nie jemand bestritten. Trotzdem lautet nun mal die korrekte Großschreibung (man beachte: 3's' in caps 😉 ) "TRINKT IN MASSEN".
    Beschwerden bitte an das Bildungsministerium oder an wen auch immer.



  • Beschwerden bitte an das Bildungsministerium oder an wen auch immer.

    Oder halt wie Bild und Spiegel nicht mehr auf die Idioten hören. Ein ß kann man nicht groß schreiben und damit Ende der Geschichte, alles andere macht nur Ärger.



  • Das hat nie was mit der Rechtschreibreform zu tun gehabt...



  • optimizer erzähl hier nich so ein schmarn!

    Ich weiß es definitiv, ß wird niemals durch ss ersetzt!

    Quelle: Vor Jahren mal ein Diktat geschrieben, dachte ich mir nimmst du statt ß ss, ist ja mode, war falsch. Dann hab ich nachgefragt weil das jeder so macht, "das grosse krabbeln" usw. und meine Deutschlehrerin meinte es ist einfach falsch, wahr immer falsch und wird es auch bleiben!



  • Cooler Beweis. Das widerlegt natürlich alles, was die bisherigen Quellen ergeben haben.



  • Schade, dass man Zahlen nicht klein schreiben kann...



  • @oifd: Troll



  • interpreter schrieb:

    Ah, und deshalb kann es kein "tolower(const char* str)" geben, oder?

    Ich hab zumindest im ganzen Thread keinen gesehen, der ein char *tolower(const char *str) definiert hätte. Und wenn du dich zurück erinnerst, begann die ganze Debatte damit, ob dieser Code hier:

    transform(s.begin(), s.end(), s.begin(),toupper);
    

    portabel sei.



  • Irgendwer schrieb:

    So ist das aber nicht portabel.

    Da seh ich jetzt nicht direkt was daran falsch sein sollte, könntest du etwas genauer sein?

    Um mal wieder Scott Meyers zu zitieren (Effective STL - Item 35):

    Like many functions in <cctype> (and hence <ctype.h>) tolower's parameter and return value is of type int, but unless that int is EOF, its value must be representable as an unsigned char. In both C and C++, char may or may not be signed (it's up to the implementation), and when char is signed, the only way to ensure that its value is representable as an unsigned char is to cast it to one before calling tolower.

    0xdeadbeef schrieb:

    Aber auch das lässt sich umgehen, indem man statt std::string std::basic_string<unsigned char> benutzt.

    Damit bekommst du auf Platformen mit char = signed char aber wieder ganz neue Probleme. U.A. kannst du einen solchen String weder Einlesen noch Ausgeben. Zumindest solange du nicht eigene Funktionen dafür schreibst. basic_string<unsigned char> und string sind dann schlicht inkompatibel.



  • oxdeadbeef schrieb:

    interpreter schrieb:

    Ah, und deshalb kann es kein "tolower(const char* str)" geben, oder?

    Ich hab zumindest im ganzen Thread keinen gesehen, der ein char *tolower(const char *str) definiert hätte. Und wenn du dich zurück erinnerst, begann die ganze Debatte damit, ob dieser Code hier:

    transform(s.begin(), s.end(), s.begin(),toupper);
    

    portabel sei.

    Und? Es ging hier um die Logik, nicht um konkreten Code.



  • HumeSikkins schrieb:

    Irgendwer schrieb:

    So ist das aber nicht portabel.

    Da seh ich jetzt nicht direkt was daran falsch sein sollte, könntest du etwas genauer sein?

    Um mal wieder Scott Meyers zu zitieren (Effective STL - Item 35):

    Like many functions in <cctype> (and hence <ctype.h>) tolower's parameter and return value is of type int, but unless that int is EOF, its value must be representable as an unsigned char. In both C and C++, char may or may not be signed (it's up to the implementation), and when char is signed, the only way to ensure that its value is representable as an unsigned char is to cast it to one before calling tolower.

    Das wusste ich nicht. Heist das nun dass wenn char = signed cahr ist, dass dann '§' zum Beispiel negativ sein kann? und beim casten von int auf char kann der Signbit abgeschnitten werden? oder hab ich das jetzt falsch verstanden? Wenn ich was teste krieg ich irgendwie immer das Zeichen bein Casten raus das ich reingestopft habe.



  • Hilft das?


Anmelden zum Antworten