Sortierung von Strings



  • Hi,

    hier ertsmal ein kleiner Quellcodeauschnitt:

    string a[10];
    string b[10]; 
    string c[10];
    string d[10];
    
    string 1[10];
    string 2[10];
    string 3[10];
    string 4[10];
    
    ???//Strings werden Sortiert und kopiert
    
    cout<<1<<endl;
    cout<<2<<endl;
    cout<<3<<endl;
    cout<<4<<endl;
    

    Wie kann ich die Strings nach z.B. a[3], b[3], c[3], d[3] nach der Größe sortieren?
    Wenn aber zwei Werte von a[3], b[3], c[3], d[3] gleich sind, dann soll von denen jeweils der Wert [4] verglichen werden.
    Der String, der den größten Wert [3] (bzw. bei Gleichheit [4]) hat, soll in in den String eins kopiert werden. der zweite in den String 2 usw.

    So, dass dann die Ausgabe stimmt.

    Weiß jemand, wie man das machen kann? Ich möchte aber bitte keine Antworten haben, die dann lauten, dass man alle Strings mit if und else und so weiter vergleichen soll.
    Wenn ich nämlich 20 Strings hab, dann hab ich keine Lust 1000 Zeilen zu schreiben!



  • ähm, irgendwie hat das Bourd noch an mein Quellcode ranghänht!

    anstelle von "?\/Strings..." sollte eigentlich "???//Strings..." kommen!

    Und die erste Zeile, die überdeckt ist, lautet:

    "Wie kann ich die Strings nach z.B. a[3], b[3], c[3], d[3] nach der Größe sortieren?"



  • Verstehe das Problem irgendwie nicht ?!

    string 4[10];

    ist da std::string mit gemeint ?

    Was meinst Du mit nach größe sortiert ?



  • Knuddlbaer schrieb:

    Verstehe das Problem irgendwie nicht ?!

    string 4[10];

    ist da std::string mit gemeint ?

    Was meinst Du mit nach größe sortiert ?

    noch ein einfacheres Beispiel: Man hat vier Stringarrys definiert. Z.B. String1[10], String2[10], erster[10] und zweiter[10].

    String1[3] hat den Ganzzahligen Wert x.
    String2[3] hat den Ganzzahligen Wert y.

    Jetzt will ich beide nach [3] sortieren. Der String, der von beiden den größeren [3] Wert hat, der String soll nach erster kopiert werden.
    Der andere nach zweiter!

    Das mal ein kleineres Beispiel.



  • Hi,

    ich bin mir da zwar nicht ganz sicher, was Du willst, aber wie ist es denn mit:

    if ( atoi(string1[3].c_str()) > atoi (string2[3].c_str()) )
           {
             erster[3] = string1[3];
             zweiter[3] = string2[3];
            }
       else
           {
             zweiter[3] = string1[3];
             erster[3] = string2[3];
            }
    

    Aber warum speicherst Du Integer in String Objekten?

    grüße Con@n



  • weil ich in string[1] auch Namen hab und so weiter



  • naja, das tut ja auch nicht zur Sache, gibt es denn da ein Befehl ?
    Wenn jemand weiß, wie man mehrere Integer Werte ordnet, wär mir das auch sehr nützlich!



  • Tut vielleicht nicht zur Sache, aber:

    string 1[10]; 
    string 2[10]; 
    string 3[10]; 
    string 4[10];
    

    Was soll das?

    mfg
    v R



  • PC++ schrieb:

    naja, das tut ja auch nicht zur Sache, gibt es denn da ein Befehl ?
    Wenn jemand weiß, wie man mehrere Integer Werte ordnet, wär mir das auch sehr nützlich!

    vector<int> temp;

    temp.push_back(122);
    temp.push_back(212);
    temp.push_back(123);

    temp.sort();



  • Knuddlbaer schrieb:

    temp.sort();

    Eher

    sort(temp.begin(), temp.end() );
    


  • "temp.sort();" sieht irgendwie logisch aus, aber:

    vector<int> v;
    sort(v.begin(), v.end() );

    v ist hier der Container, begin() und end() die Iteratoren und sort(...) der Algorithmus. Die Iteratoren sind sozusagen die "Griffe" (handles), mit deren Hilfe der Algo auf den Container zugreift. Das ist ein allgemeines Konzept der STL.

    Der von end() zurück gelieferte Wert ist dabei nicht der letzte gültige für den Iterator, sondern der erste ungültige. Containerelemente kann man mittels Iterator i als *i darstellen. Einfaches Beispiel für dieses Zusammenspiel Container/Iterator:

    vector<int> v;
    vector<int>::iterator i; 
    for ( i = v.begin(); i != v.end(); ++i )
        { std::cout << *i << std::endl; }
    

Anmelden zum Antworten