[C++] Strings sortieren

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • [C++] Strings sortieren

    Hallo zusammen,

    ich hab ne Liste von Strings mit Bildnamen:
    Bild1, Bild2, .. Bild99

    Wenn ich das ganze jetzt nach ASCII sortiere erhalte ich (wie erwartet)
    1,10,11,12,...19,2,20,21,...29,3

    Das ist für den User aber ziemlich blöde, mal davon abgesehen dass es für Unicode nicht funktioniert und ich das Gruseln bekomme wenn ich an China/Japan/Frankreich/Spanien usw. denke.

    Ich hzab mit (w)strcoll rumprobiert, tut aber auch nicht.

    Gibt's hierzu was in der CoreFoundation?

    Wie sortiert der Finder die Bildnamen, der machts nämlich ordentlich.

    Danke und Gruss

    Exo
  • O.k., sorry, wär im Carbon Forum besser aufgehoben gewesen.
    Die Lösung darf ruhig per C++ auf Mac OS X sachen zugreifen.

    Mein String liegt als objekt array vor. Jedes Object entspricht einem Unicode 4.0 Character. Wobei Unicode Characters mit einem Code Value über 65535 als zwei werte gespeichert werden.

    Die zugehörigen Methoden erlauben mir einen wandel nach std:wstring und UTF-8.

    Gruss

    Exo
  • Original von Exolon
    Mein String liegt als objekt array vor. Jedes Object entspricht einem Unicode 4.0 Character. Wobei Unicode Characters mit einem Code Value über 65535 als zwei werte gespeichert werden.

    UTF-16?

    Eine Möglichkeit:
    - CFStrings daraus basteln
    - Alle CFStrings in ein CFArray werfen
    - CFArraySortValues() mit CFStringCompare als Vergleichsfunktion und kCFCompareNumerically als Option - letzteres tut genau das, was Du willst.
    Multigrad - 360°-Produktfotografie für den Mac
  • Ein kleiner Hinweis zu wstring: Es ist vielleicht wichtig zu wissen, dass hier bei Windows eine 2 Byte darstellung, bei OS X aber eine 4 Byte Darstellung verwendet wird. Solange Du aber auf einem System bleibst ist das egal

    Alex
    The only thing that really worried me was the ether.
  • Original von tjp
    Als std::wstring kannst Du sie über den locale Support richtig sortieren lassen, sofern Apple C++ denselben Locale Support spendiert hat, wie Carbon/Cocoa. std::wstring nutzt die UCS-2/UCS-4 Darstellung von Unicode Strings.


    locale support war das richtige Stichwort zum suchen. Vielen Dank an alle für die Hilfe.

    UCCreateCollator mit den Flags kUCCollateStandardOptions|kUCCollateDigitsAsNumberMask|kUCCollateDigitsOverrideMask

    und das ganze dann mit UCCompareText vergleichen funktioniert prächtig.

    Gruss Exo