Strings sortieren



  • Also ich habe

    char * String [ ] = { "B" , "A", "C", "F", "D" };
    

    Das hiesse ja jetzt :

    String[1] = "B"
    String[2] = "A"

    Wie kann ich jetzt alle Strings in String nach Alphabet sortieren ?



  • Wenn du wirklich nur einzelne Buchstaben in den strings hast kannst du doch auch einfach char nehmen:

    char zeichen[] = { "B", "A", "C", "F", "D" };
    

    und diese dann anhand ihres ASCII-Wertes sortieren:

    int i;
    char buffer;
    ...
    for(i=0;i<5;i++)
    {
     if((int)zeichen[i]>(int)zeichen(i++)
     {
      buffer = zeichen[i];
      zeichen[i] = zeichen[i++];
      zeichen[i++] = buffer;
     }
    }
    

    NICHT AUSPROBIERT, NUR EINE IDEE 😉 🙄



  • Setz Dich mal mit Sortieralgorithmen zusammen:
    Ist eigentlich keine Frage von API, sondern von C.
    http://pronix.linuxdelta.de/C/standard_C/c_programmierung_25.shtml#3
    http://pronix.linuxdelta.de/C/standard_C/c_programmierung_24_2.shtml



  • Niklas Cathor schrieb:

    und diese dann anhand ihres ASCII-Wertes sortieren:

    ⚠ Ein Beispiel ⚠ ➡
    Der ASCII-Wert für A (= groß 'a') ist 65, der für a (= klein 'a') ist 97.
    Demnach würde bei einem cast nach int und einem anschließenden Vergleich a größer als A sein!



  • Niklas Cathor schrieb:

    und diese dann anhand ihres ASCII-Wertes sortieren:

    nicht jeder verwendet nur ASCII Zeichen!

    CodeFinder schrieb:

    ⚠ Ein Beispiel ⚠ ➡
    Der ASCII-Wert für A (= groß 'a') ist 65, der für a (= klein 'a') ist 97.
    Demnach würde bei einem cast nach int und einem anschließenden Vergleich a größer als A sein!

    Das ist ein schlechtes Beispiel für einen Stringvergleich!
    Wir wissen aber zu wenig vom OP, was er genau will. Stringvergleich ist sehr allgemeingültig.
    I.d.R. macht man sowas über "Weights".
    Siehe auch: LCMapString
    Oder schau im Unicode-Standard nach... (link fehlt mir gerade).



  • Jochen Kalmbach schrieb:

    Niklas Cathor schrieb:

    und diese dann anhand ihres ASCII-Wertes sortieren:

    nicht jeder verwendet nur ASCII Zeichen!

    CodeFinder schrieb:

    ⚠ Ein Beispiel ⚠ ➡
    Der ASCII-Wert für A (= groß 'a') ist 65, der für a (= klein 'a') ist 97.
    Demnach würde bei einem cast nach int und einem anschließenden Vergleich a größer als A sein!

    Das ist ein schlechtes Beispiel für einen Stringvergleich!
    Wir wissen aber zu wenig vom OP, was er genau will. Stringvergleich ist sehr allgemeingültig.
    I.d.R. macht man sowas über "Weights".
    Siehe auch: LCMapString
    Oder schau im Unicode-Standard nach... (link fehlt mir gerade).

    Dämlicher Besserwisser ... geh kacken man!



  • Jochen Kalmbach schrieb:

    Niklas Cathor schrieb:

    und diese dann anhand ihres ASCII-Wertes sortieren:

    nicht jeder verwendet nur ASCII Zeichen!

    Jo! Er aber schon:

    Jochen Kalmbach schrieb:

    CodeFinder schrieb:

    ⚠ Ein Beispiel ⚠ ➡
    Der ASCII-Wert für A (= groß 'a') ist 65, der für a (= klein 'a') ist 97.
    Demnach würde bei einem cast nach int und einem anschließenden Vergleich a größer als A sein!

    Das ist ein schlechtes Beispiel für einen Stringvergleich!
    Wir wissen aber zu wenig vom OP, was er genau will. Stringvergleich ist sehr allgemeingültig.
    I.d.R. macht man sowas über "Weights".
    Siehe auch: LCMapString
    Oder schau im Unicode-Standard nach... (link fehlt mir gerade).

    Hm jo aber im 1. Post hat er ja nur einzelne Zeichen angegeben, deswegen bin ich ja davon ausgegangen, dass es auch nur solche vergleichen will...wenns Zeichenketten sind, würde ich warscheinlich std::string's nehmen; allein schon wg. der Unabhängigkeit bzgl. UNICODE usw. 😉 . Emm was sind denn 'Weights' ? 🙄



  • "char" heisst noch lange nicht, dass da nur ASCII Zeichen drin sind. Oder ist 'ä' ein ASCII Zeichen?
    Ich geb ja zu, im OP stehen nur ASCII Zeichen... trotzdem kann ich nicht ausschliessen, dass er nicht doch ein 'ä' verwenden will (wie ich schon sagte: wir wissen zu wenig). SOnst hätte er ja schreiben können: "Ich will Zahlen sortieren". Da ist es dann eindeutig.

    Bzgl. Weights:

    Siehe: Globalization Step-by-Step (Sorting and String Comparison)
    http://www.microsoft.com/globaldev/getwr/steps/wrg_sort.mspx

    Für eine ganz schnelle Einführung, siehe dieses Bild:
    http://img.microsoft.com/globaldev/images/steps/f04tm21.gif

    Ansonsten siehe:
    Unicode Collation Algorithm
    http://www.unicode.org/reports/tr10/

    Unknown-87 schrieb:

    Dämlicher Besserwisser ... geh ****** man!

    Ich wollte nur sagen, dass viele Dinge nicht so trivial sind, wie sie oft vermutet werden...



  • Also um nochmal zu klaeren.. das sollen etwas laengere String werden zum Bespiel

    char * Buffer [] = { "Test" , "Alpha", "Computer" };
    

    KEINE Zahlen



  • std::string
        at()
        for-schleife
    }
    catch(...)
    {
        cya
    }
    


  • http://theory.stanford.edu/~amitp/rants/c++-vs-c/
    (gaaanz unten)

    Aber vorsicht: Die meisten ALgorythmen vergelichen nur "Zahlen" und keine Codepoints (also die Sortierung von ä, ö, usw. ist dort falsch.


Anmelden zum Antworten