Bitte um Erklärung für Anfänger | Namen alphabetisch sortieren



  • Hallo liebe Forengemeinde,

    ich habe folgende Sortierfunktion gegeben, die Namen alphabetisch sortiert und ausgibt. Übergabeparameter sind ein string Array mit Namen und deren Anzahl:

    void sortiere(string namen[], int size)
    {
    	string tmp_name = "";
    	for (int i = 0; i < size - 1; i++)
    	{
    		for (int j = i+1; j < size; j++)
    		{
    			if (namen[i] > namen[j]) {
    			tmp_name = namen[i];
    			namen[i] = namen[j];
    			namen[j] = tmp_name;
    		}
    		}
    	}
    .......
    

    Meine Frage bezieht sich auf die If-Anweisung (Zeile 8), in der zwei strings miteinander verglichen werden. Was genau und wie vergleicht die Operation, um Rückschlüsse über die alphabetische Ordnung zu bekommen? ASCII-Code?

    Vielen Dank im Voraus für eure Antwort(en)!



  • @Person-921 sagte in Bitte um Erklärung für Anfänger | Namen alphabetisch sortieren:

    string namen[]
    

    mag zwar aussehen wie ein Array, ist aber "nur" ein Pointer auf das erste Element einen string. Da könnte genausogut string *namen stehen. Stichwort: Array-to-pointer decay.

    @Person-921 sagte in Bitte um Erklärung für Anfänger | Namen alphabetisch sortieren:

    ASCII-Code?

    Vermutlich. Zumindest die lateinischen Buchstaben haben in allen gängigen Kodierungen die selben Werte.



  • Hier wird der String-Vergleichsoperator operator==,!=,<,<=,>,>=(std::basic_string) aufgerufen, welcher sich intern wie std::lexicographical_compare verhält. Der offizielle Ausdruck dafür ist also "Lexikographischer Vergleich" (welcher auf den meisten [gängigen] Plattformen auf der ASCII- bzw. für std::wstring auf der Unicode-Kodierung basiert). Daher solltest du auch mal von EBCDIC gehört/gelesen haben, um zu wissen, daß es auch andere Kodierungen gibt.


Log in to reply