Programmieren - alles kontrollieren 4.941 Themen, 20.715 Beiträge

Buchstaben sortieren mithilfe von C++

Selecta / 8 Antworten / Baumansicht Nickles

Also:

Eingabe: a, b oder c
Eingabe: a, b oder c ( jwtzt ohne den zuvor eingegeben)
Eingabe: a, b oder c ( Der der übrig bleibt)

Nun soll das Programm diese Eingabe sortieren.
Etwa bei "b a c" soll es "a b c" ausgeben. Wie geht dies am einfachsten ?
Alles was ich im Netz über qsort/bubblesort etc. finde ist ellenlang und mir als Afänger unverständlich. Es soll so kurz wie möglich sein.
Bitte um Hilfe

GreeTz Selecta

bei Antwort benachrichtigen
Borlander Selecta „Buchstaben sortieren mithilfe von C++“
Optionen
Etwa bei "b a c" soll es "a b c" ausgeben. Wie geht dies am einfachsten ?
Da jedes mal sowieso eine selben Elemente (nur in unterschiedlicher Reihenfolge) eingegeben werden sollen kann man sich den Sortiervorgang schlicht und einfach schenken! Warum lange sortieren wenn man das Ergebnis sowieso schon kennt?

Gruß
Borlander
bei Antwort benachrichtigen
d-oli Selecta „Buchstaben sortieren mithilfe von C++“
Optionen

Hi

So etwa?




// main.C
#include <iostream>
#include <stdlib.h>
#include <string.h>

char text[ 256 ] = "qwertzuiopasdfghjklyxcvbnm";

int compare( const void * a, const void * b )
{
   return ( *( char* )a - *( char* )b );
}

int main( int argc, char** argv )
{
   int   cLen  = sizeof( char );
   int   aLen  = strlen( text );

   std::cout << "Before : " << text << std::endl;

   qsort( text, aLen, cLen, compare );

   std::cout << "After  : " << text << std::endl;

   return 0;
}






dann so:
[]$ g++ main.C
[]$ ./a.out
Before : qwertzuiopasdfghjklyxcvbnm
After : abcdefghijklmnopqrstuvwxyz
[]$

Quelle ->stdlib->qsort

Gruss, d-oli
Konstruktive Kritik zeichnet sich dadurch aus, dass sie höflich, nützlich und sachlich ist.
bei Antwort benachrichtigen
mr.escape d-oli „Hi So etwa? dann so: g main.C ./a.out Before : qwertzuiopasdfghjklyxcvbnm After...“
Optionen

Ich habe mir angewöhnt, bei qsort den aufruf etwas bequemer zu gestalten:

typedef int (__cdecl *COMPARE )(const void *elem1, const void *elem2);

die vergleichfunktion wird in diesem fall dann zu:
int compare( const char* a, const char* b ) 

{
return ( *a - *b );
}

und der aufruf zu:
qsort( text, aLen, cLen, (COMPARE)compare );

In diesem fall ist der gewinn nicht hoch, aber wenn die zu vergleichenden elemente öfter angesprochen werden, ist der zwang zum "type casting" ganz schön lästig.

mr.escape
"The man who trades freedom for security does not deserve nor will he ever receive either." - Benjamin Franklin"Wer seine Freiheit aufgibt, um Sicherheit zu erreichen, wird beides verlieren." - Georg Christoph Lichtenberg
bei Antwort benachrichtigen
d-oli mr.escape „Ich habe mir angewöhnt, bei qsort den aufruf etwas bequemer zu gestalten:...“
Optionen

Guter Tipp! Macht das Ganze doch etwas lesbarer. Danke.

Konstruktive Kritik zeichnet sich dadurch aus, dass sie höflich, nützlich und sachlich ist.
bei Antwort benachrichtigen
Selecta Nachtrag zu: „Buchstaben sortieren mithilfe von C++“
Optionen

Ähm Borlander ? Es geht nicht um den Sinn, sondern darum 3 eigegebene Buchstaben nach dem Alphabet auszugeben. Ich kann doch nicht für Schulaufgaben (die haben wir NICHt auf, sondern ich bin etwas weiter, als die anderen gegangen!)

GreeTz Selecta

bei Antwort benachrichtigen
Borlander Selecta „Ähm Borlander ? Es geht nicht um den Sinn, sondern darum 3 eigegebene...“
Optionen
Es geht nicht um den Sinn
Aber dann sollte es doch immer auch darum gehen einen möglichst effizienten Code zu produzieren?

3 eigegebene Buchstaben nach dem Alphabet auszugeben
Also beliebige Buchstaben?
Bei so einem Vorgang würde sich eigentlich insert-Sort anbieten - bei 3 Elementen könnte man aber auch ohne Gewissensbisse BubblesortSort (nur 3 Vergleiche + 0-3 Vertauschungen) verwendet werden (Quick-Sort oder andere "aufwendigere" Sortieralgorithmen bringen bei dieser Anzahl noch keinen Vorteil). Da QuickSort allerdings Bestandteil von ANSI C(++) ist, kann man das natürlich besonders bequemsten nutzen...

Andere Möglichkeit (für nur 3 Elemente wie hier):
Der erste Wert wird gespeichert, nach Eingabe des zweiten wird verglichen und beide die beiden sortiert auf Pos 1 und 3 der Liste abgelegt, bim 3. wird dann anschließend geprüft ob es kleiner(/gleich) [1] ist, kleiner(/gleich) [3] ist und dann an der entsprechenden Position eingefügt wobei ggf. eins der beiden vorhanderenen Elemente vorher noch in ein anderes Feld kopier werden muß (2-3 Vergleiche, 0-1 Kopieren, sowie natürlich 3 Einfügen für die jeweiligen Elemente - das schaut auf den ersten Blick am sparsamsten aus)...


Gruß
Borlander
bei Antwort benachrichtigen
Selecta Nachtrag zu: „Buchstaben sortieren mithilfe von C++“
Optionen

Mh danke erstmal.
Das Problem besteht eher darin, das auf dem Blatt mit den Aufgaben keine nur einen Pups dem Niveau entsprechen, das du da gerade gepostet hast. Ich verstehe von deinem Code so gut wie Null. Am besten schreibe ich euch mal 2 Aufgaben Wort für Wort hier hin,
DAMIT ihr das Niveau, auf dem ich Anfänger bin, erfasst: Hier eine der VORIGEN:

Gegeben sind 2 Punkte P(x1,y1) und Q (x2,y1). Gesucht ist die Gleich y = m(x) + b der Verbindungsgraden PQ. Berücksichtigen sie alle Möglichkeiten der Lage der Punkte bzw. Gerade. // Die war nicht so schwer lösbar.

Ein solches NIVEAU herscht gerade vor (EDV - C++ - 11. Klasse)

Die SORTIER AUFGABE: // Die will ich wissen.

Drei in beliebiger Reihenfolge eingegebene Zeichen sollen in alphabetischer Reihenfolge wieder ausgegeben werden. Schreiben sie ein entsprechendes Programm.


--- GEHT DAS NICHT GANZ LEICHT ? WIR KÖNNEN DOCH NOCH NIX UND SOWEIT ICH DEN LEHRER KENNE LERNEN WIR, WIE DAS GEHT, SCHON IN DER NÄCHSTEN STUNDE UND KRIEGEN DAS DANN ALS HAUSI. DAS MUSS DEMNACH DOCH GANZ EASY GEHEN, ODER ? ----

GreeTz Selecta


bei Antwort benachrichtigen
Borlander Selecta „Mh danke erstmal. Das Problem besteht eher darin, das auf dem Blatt mit den...“
Optionen
GEHT DAS NICHT GANZ LEICHT ?
Doch, wenn Du keinen allgemeinen Sortieralgorithmus verwenden willst dann probier es mal so wie ich oben beschrieben habe (das bietet sich aber wirklich nur bei 3 Elementen an)...

Gruß
Borlander
bei Antwort benachrichtigen