Großschreibung?



  • Wie soll die Funktion das Wort "groß" in Großbuchstaben umwandeln? Nach deutscher Rechtschreibung ist einzig und allein "GROSS" richtig, "GROß" ist falsch (und sieht nebenbei furchtbar aus). "GROSS" hat aber ein Zeichen mehr.

    Das ist nur eins der Probleme, die beim Umwandeln in Großbuchstaben auftreten.



  • cd9000 schrieb:

    Wie soll die Funktion das Wort "groß" in Großbuchstaben umwandeln? Nach deutscher Rechtschreibung ist einzig und allein "GROSS" richtig, "GROß" ist falsch (und sieht nebenbei furchtbar aus). "GROSS" hat aber ein Zeichen mehr.
    Das ist nur eins der Probleme, die beim Umwandeln in Großbuchstaben auftreten.

    so ein quatsch aber auch.
    wie manche wissen, wird der geburtsort in ausweisen GROSS gedruckt. die stadt gießen wied als "GIEßEN" gedruckt. da bin ich sicher, denn ein solcher ausweis liegt mir vor.
    ist es jetzt so, daß alle ämter da einen fehler machen? oder machst du einen fehler? oder ist deutsch am ende eine lebende sprache, die nicht so perfekt zu toten köpfen paßt?



  • vergesst den muell den cd9000 redet, gross war nie richtig und wird auch niemals richtig sein, weder nach alter rechtschreibung noch nach neuer.

    Es heißt groß, nicht gross! IMMER



  • Jester schrieb:

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

    oder so ähnlich müßte auch gehen.

    Da fehlt nocht der Ausgabe-Iterator:

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

    So ist das aber nicht portabel. So ist's besser:

    #include <algorithm>
    #include <cctype>
    #include <string>
    using namespace std;
    struct my_toupper
    {
    char operator()(char c) const
    {
        return toupper(static_cast<unsigned char>(c));
    }
    };
    
    int main()
    {
        string s("Hallo");
        transform(s.begin(), s.end(), s.begin(),my_toupper());
    
    }
    


  • Was cd9000 angesprochen hat, ist nicht unwesentlich.
    Von mir aus kann man sich über ß -> SS streiten (wobei ich glaube, dass er da Recht hat. Wenn ich mich nicht täusche, schreiben Ämter nur generell Großbuchstaben und wollen nicht deshalb das ß verlieren).
    Tatsache ist, dass sich die Länge des Strings bei so einer Operation durchaus ändern kann, vor allem auch in anderen Sprachen.

    Deshalb ist z.B. ein Java-String genau auf sowas ausgelegt:
    http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html#toUpperCase(java.util.Locale)

    Converts all of the characters in this String to upper case using the rules of the given Locale. Case mapping is based on the Unicode Standard version specified by the Character class. Since case mappings are not always 1:1 char mappings, the resulting String may be a different length than the original String.



  • small letter sharp s -> two letters: SS



  • So ist das aber nicht portabel.

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



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



  • @Optimizer bestimmt Java nun die deutsche Rechtschreibung? Nicht nur Verlage und Politik streiten drüber jetzt mischt sich auch noch Java ein das kann ja heiter werden.



  • volkard schrieb:

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

    Tja, ist aber so.



  • The toupper() function has as a domain a type int, the value of which is representable as an unsigned char or the value of EOF. If the argument has any other value, the behavior is undefined. If the argument of toupper() represents a lowercase letter, and there exists a corresponding uppercase letter (as defined by character type information in the program locale category LC_CTYPE ), the result shall be the corresponding uppercase letter. All other arguments in the domain are returned unchanged.

    Das bedeutet, das einzige Problem, das auftreten kann, ist, dass Umlaute und sonstige Sonderzeichen trotz locale nicht erkannt werden und klein zurückkommen. Aber auch das lässt sich umgehen, indem man statt std::string std::basic_string<unsigned char> benutzt.

    Oh, und es ist natürlich immer tolower(toupper(s)) == tolower(s).



  • interpreter schrieb:

    volkard schrieb:

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

    Tja, ist aber so.

    tja, ist aber nicht im deutschen nach cd9000 so. dort wird aus "GIESSEN" wieder ein "gießen". den weg, daß aus ß immer SS wird, aber aus SS nie wieder ein ß, finde ich befremdlich. aber das scheint im moment der von euch geforderte weg zu sein. und das nur, weil rechner noch recht doof sind. dann trage ich gerne der doofheit rechnung und erlaube ß in grossschrift (ja, ßs statt sss).



  • 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...

    *** schrieb:

    @Optimizer bestimmt Java nun die deutsche Rechtschreibung? Nicht nur Verlage und Politik streiten drüber jetzt mischt sich auch noch Java ein das kann ja heiter werden.

    Ne, Java hält sich nur an gängige Standards.



  • 0xdeadbeef schrieb:

    Oh, und es ist natürlich immer tolower(toupper(s)) == tolower(s).

    wie? mit einigen megabytes an wörterbüchern dahinter? oder mit toupper("Gießen")=="GIEßEN"?



  • Bitte schlagt euch jetzt endlich

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

    aus dem Kopf. Das ist Blödsinn.

    tolower(toupper("AbCdEfG")) ist halt nun mal nicht wieder AbCdEfG. Weil ein String nach tolower halt nun mal nur Kleinbuchstaben enthält. Das ist ja wohl der Sinn des Ganzen.



  • 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!"));
    

Anmelden zum Antworten