qsort macht Murks
-
Hi,
Ich habe ein ziemlich sinnfreies Programm geschrieben, das Buchstaben in einem Array sortiert:#include <iostream> using namespace std; int Vergleiche (const void* str1, const void* str2) { if ( (char)str1 < (char)str2 ) return -1; if ( (char)str1 == (char)str2 ) return 0; else return 1; } int main () { char chString[9] = "Autohaus"; cout << chString << endl; qsort( (void*)chString, 9, sizeof( char ), Vergleiche ); cout << chString << endl; return 0; } // mainZu meiner Überraschung gibt das Programm jedoch folgendes aus:
Autohaus
hutoAus
Da wurden ja nur zwei Buchstaben vertauscht, liegt es vielleicht an meiner Vergleiche Funktion? Ich erkenne den Fehler nicht.
-
So gehts
#include <iostream> using namespace std; int Vergleiche (const void* str1, const void* str2){ if ( *((char*)str1) < *((char*)str2) ) return -1; if ( *((char*)str1) == *((char*)str2) ) return 0; else return 1; } int main () { char chString[9]; strcpy( chString, "Autohaus"); cout << chString << endl; qsort( (void*)chString, strlen(chString), sizeof( char ), Vergleiche ); cout << chString << endl; return 0; }Kurt
-
int Vergleiche( const void * a , const void * b ) { return strcmp(reinterpret_cast<const char*>(a),reinterpret_cast<const char*>(b)); }
-
RedundancyKiller schrieb:
int Vergleiche( const void * a , const void * b ) { return strcmp(reinterpret_cast<const char*>(a),reinterpret_cast<const char*>(b)); }Sorry aber mit strcmp kannst du keine char vergleichen.
Kurt
-
Unter C++ gibts bessere Möglichkeiten zu Sortieren.
-
Jetzt hab ich es durch ausprobieren selber rausgefunden, in der Vergleiche Funktion muss es (char) heißen.