Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Borland C++ Builder » Wie mit qsort ein *char (=string?) sortieren?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
25.11.2013, 18:45 Uhr
C-Laie



Hallo C-Experten!

Bitte entschuldigt, daß ich mich noch mal an Euch wende, aber ich komme einfach nicht zum gewünschten Ergebnis.

Stundenlanges Suchen in den Foren, sonst im Internet und auch Probieren mit dem Borland-C++-Builder brachten mich nicht weiter.

Ich benötige (ich deutete es in der vorigen Diskussion schon an) die q-Sort-Funktion, die ich auf ein dynamisches char-Array "loslassen" möcht - oder umgekehrt. Ich kenne dafür die Bezeichnung string.

Jedenfalls, ein im Internet gefundenes, kopiertes und funktionierendes (wird erfolgreich sortiert!) Beispiel mit Integern


C++:
int compare (const void * a, const void * b)
  {
    return ( *(int*)a - *(int*)b );
  }

void __fastcall TForm1::Button1Click(TObject *Sender)
{
int values[] = { 40, 10, 100, 90, 20, 25 };
qsort (values, 6, sizeof(int), compare);
}


versuchte ich auf *char "umzubiegen:


C++:
int vergleichen(const char * a, const char * b)
  {
    return strcmp(a,b);
  }

void __fastcall TForm1::Button1Click(TObject *Sender)
{
char*a="DABECF";
qsort(a,6,sizeof(*a),vergleichen);
}


, wobei der größte Erfolg darin bestand, daß der Compiler die Funktion "vergleichen" akzeptierte. Doch an der qsort-Zeile scheitert es an der Stelle "vergleichen". Wenn gewünscht, kann ich die ziemlich kryptische Fehlermeldung nachreichen. Klar, eine Typenunverträglichkeit liegt vor, nur welche? Ergänzung: Vereinfacht dargestellt, es wird moniert, daß const char nicht zu const void konvertiert werden kann. Klar, die qsort-Funktion benötigt ja nur untypisierte Zeiger.

Ich versuchte sogar, die char-Vergleichsfunktion gemäß dem funktionierendem Integer-Pendant 1:1 umzuformen:


C++:
int vergleichen(const void * a, const void * b)
  {
    return strcmp(*(char*)a,*(char*) b);
  }

void __fastcall TForm1::Button1Click(TObject *Sender)
{
char*a="DABECF";
qsort(a,6,sizeof(*a),vergleichen);
}


, doch auch das war leider erfolglos, da scheitert es schon in der Befehlszeile in der Funktion (die mit "return" beginnt).

Was mache ich nur falsch?

Besten Dank für die Aufmerksamkeit im voraus!

Viele Grüße

C-Laie

Edit: Mit


C++:
int vergleichen(const void * a, const void * b)
  {
    return strcmp((char*)a,(char*) b);
  }


wird es endlich klaglos akzeptiert, und es sortiert sogar - heureka!

Dieser Post wurde am 25.11.2013 um 19:05 Uhr von C-Laie editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ Borland C++ Builder ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: