std::locale wirt exception



  • Hi!

    Habe ein (mehr oder weniger wichtiges 🙄 ) Problem mit den C++ Locals, denn folgender Code will einfach nicht funktionieren (obwohl ich schon das halbe internet zu gültigen "Codes" durchforstet hab'):

    std::locale("German");
    

    Der Code muss eigentlich funktionieren. Früher hat er das (obwohl ich vielleicht einen anderen Code benutzt habe... an den ich mich nicht erinnere). Was ist da falsch?

    VD

    P.S.: Das "nicht funktionieren" heißt, dass die übliche exception geschmissen wird (dass der Name nicht erkannt wird).



  • trololol
    google it



  • Die Namen für die locales sind leider stark plattformanhängig. Vermutlich ist der Name für die Plattform auf der Du testest einfach falsch.





  • vario-500 schrieb:

    http://www.c-plusplus.net/forum/263858

    Kenn ich schon. War ich schon.



  • Tachyon schrieb:

    Die Namen für die locales sind leider stark plattformanhängig. Vermutlich ist der Name für die Plattform auf der Du testest einfach falsch.

    Ich "teste" auf Windows 7. Gibt es keinen Konsolen-Befehl zum auflisten aller gültiger Namen?



  • 314159265358979 schrieb:

    trololol
    google it

    Hab ich doch! Ist praktisch Zeitverschwendung!

    Edit: Nein, doch nicht. Aber trotzdem.



  • *push* Bitte nicht ignorieren. Nach einer Weile herumsuchens bin ich auf nichts gestoßen. Kennt ihr nicht vielleicht ein paar Seiten oder so? Welche benutzt ihr? Der Standard ist leider auch schweigend. Und nach mehr als 20 Herumprobierereien hab ich auch keinen Bock mehr.

    Es kann doch nicht sein, dass ich jetzt keine Locals mehr benutzten kann!?



  • Die Lösung wurde doch schon genannt: Benutze den compilerspezifischen String.



  • Michael E. schrieb:

    Die Lösung wurde doch schon genannt: Benutze den compilerspezifischen String.

    Danke 🙂 ! Aber wo wurde die denn genannt? Im anderen Link?


  • Mod

    Hacker schrieb:

    Michael E. schrieb:

    Die Lösung wurde doch schon genannt: Benutze den compilerspezifischen String.

    Danke 🙂 ! Aber wo wurde die denn genannt? Im anderen Link?

    Also compilerspezifisch ist nicht ganz richtig, eher plattformspezifisch. Plattformunabhängig sind nur die locales "C" (im Prinzip US-Englisch) und "" (die Systemlocale). Die anderen musst du eben nachschlagen. Wobei ich noch nie den Grund verstanden habe, wieso man etwas anderes nehmen sollte als "" (oder "C"), denn ich will nicht, dass ein Programm plötzlich eine ungewöhnte Locale benutzt, bloß weil es von einem Deutschen programmiert wurde. Da ist doch der ganze Sinn von Loacales futsch, wenn das Programm nicht die Systemlocale (und damit meine Sprache) benutzt (oder wenn es sein muss die Standardlocale), sondern die Sprache des Programmierers. Wieso hätte mich als Nutzer zu interessieren, wie der Programmierer in der Schule seine Dezimaltrennzeichen geschrieben hat? Oder noch schlimmer wird's wenn das Programm noch einen andere Zeichensatz erzwingt als den meiner Ausführungsumgebung. Ich wüsste nicht einmal aus dem Kopf, wie ich in meiner Konsole ein UTF-32 Zeichen tippen kann.



  • SeppJ schrieb:

    Hacker schrieb:

    Michael E. schrieb:

    Die Lösung wurde doch schon genannt: Benutze den compilerspezifischen String.

    Danke 🙂 ! Aber wo wurde die denn genannt? Im anderen Link?

    Also compilerspezifisch ist nicht ganz richtig, eher plattformspezifisch. Plattformunabhängig sind nur die locales "C" (im Prinzip US-Englisch) und ....

    Naja, jedenfalls funktioniert das "Programm" mit der system-lokale auch nicht - und wenn man dann (deiner Argumentation folgend) keine anderen nehmen sollte, hat man ja keine Wahl, als toupper, bzw. tolower selbst zu implementieren.


  • Mod

    So so! es funktioniert also nicht. Lies dir doch bitte mal den ersten Link in meiner Signatur gründlich durch und stell dann noch einmal eine brauchbare Frage.

    (Dass ich das mal bei jemandem mit 1500 Beiträgen schreiben muss 🙄 )

    P.S.: Du sagst also, dass
    http://ideone.com/jbkvZ
    bei dir eine Exception wirft?



  • SeppJ schrieb:

    So so! es funktioniert also nicht. Lies dir doch bitte mal den ersten Link in meiner Signatur gründlich durch und stell dann noch einmal eine brauchbare Frage.

    (Dass ich das mal bei jemandem mit 1500 Beiträgen schreiben muss 🙄 )

    Ok.

    Nein, es funktioniert nicht, da es einfach Umlaute ignoriert (was Michael E. furchtbar blöd findet - und ich auch). Das sollte es aber nicht, wenn das globale locale auf German gesetzt wurde. Also? 🤡


  • Mod

    Hacker schrieb:

    Nein, es funktioniert nicht, da es einfach Umlaute ignoriert (was Michael E. furchtbar blöd findet - und ich auch). Das sollte es aber nicht, wenn das globale locale auf German gesetzt wurde. Also? 🤡

    So so! "Es" "ignoriert" Umlaute. Dann ist ja jetzt alles klar.



  • SeppJ schrieb:

    Hacker schrieb:

    Nein, es funktioniert nicht, da es einfach Umlaute ignoriert (was Michael E. furchtbar blöd findet - und ich auch). Das sollte es aber nicht, wenn das globale locale auf German gesetzt wurde. Also? 🤡

    So so! "Es" "ignoriert" Umlaute. Dann ist ja jetzt alles klar.

    Kennst du den anderen Thread nicht?

    #include <iostream>
    #include <string>
    
    void firstToupperOtherTolower(std::string& str)
    {
          if(str.length())
                str.at(0) = toupper(str.at(0));
    
          for(std::string::size_type a(1);a < str.length();++a)
                str.at(a) = tolower(str.at(a));
    }
    
    int main()
    {
          std::locale::global(std::locale(""));
    
          std::string vorname, nachname;
          std::cout << "Bitte Vornamen eingeben: ";
          std::getline(std::cin, vorname);///PI zuliebe
          std::cout << "Bitte Nachnamen eingeben: ";
          std::getline(std::cin, nachname);
    
          firstToupperOtherTolower(nachname);
          firstToupperOtherTolower(vorname);
    
          std::cout << "Ihr Name ist " << vorname << ' ' << nachname << '\n';
    }
    

    Eingabe: oNI oNI Ausgabe: Oni Oni
    Eingabe: öLÄ öNÜ Ausgabe: ölÄ önÜ





  • Michael E. schrieb:

    http://www.cplusplus.com/reference/std/locale/ctype/tolower/
    http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&faq=stricmp#Answ

    Erstes Kenn ich (natürlich) schon, zweites hat mit meiner Fragem Problem nichts zu tun (strings case-insensitive vergleichen!?) 😕



  • Hacker schrieb:

    std::getline(std::cin, vorname);///PI zuliebe
    

    wat



  • 314159265358979 schrieb:

    Hacker schrieb:

    std::getline(std::cin, vorname);///PI zuliebe
    

    wat

    Hattest dich doch letztens mit Werner Salomon gezofft? 😃



  • ney.


Anmelden zum Antworten