<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Funktion qsort .. Struktur nach Eingabe sortieren]]></title><description><![CDATA[<p>Hallo zusammen,<br />
ich komme im Moment einfach nicht weiter und brauche Hilfe von erfahrenen Programmierern.</p>
<p>Ich sitze momentan an einer kleinen Adressenverwaltung.</p>
<p>Der Benutzer gibt über ein Menü in eine Struktur seine Daten ein.<br />
Diese Struktur sieht so aus:</p>
<p>Struktur.h</p>
<pre><code class="language-cpp">#ifndef STRUKTUR_H
#define STRUKTUR_H

struct TAdressen {
	char Vorname[40 + 1];
	char Nachname[40 + 1];
	char Strasse[80 + 3];
	char Hausnummer[3 + 1];
	char Postleitzahl[5 + 1];
	char Stadt[50 + 1];
};

#endif
</code></pre>
<p>Alles eingegeben, soweit, so gut, möchte ich nun, dass der Benutzer per Menü die Adressen nach Nachnamen sortieren kann.</p>
<p>AdressenSortieren.cpp</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &quot;Struktur.h&quot;
#include &quot;Funktionen.h&quot;

using namespace std;

int vergleich(const void * a, const void * b) {
	if( (const TAdressen *) a &lt;  (const TAdressen *) b ) return -1;
	if( (const TAdressen *) a == (const TAdressen *) b ) return 0;
	if( (const TAdressen *) a &gt;  (const TAdressen *) b ) return 1;

	return 0;
}

TAdressen * adressen_sortieren(TAdressen * user, int UserAnzahl)
{
	qsort(user-&gt;Nachname, UserAnzahl, sizeof(TAdressen), vergleich);

	return user;
}
</code></pre>
<p>Die Funktion adressen_sortieren wird folgendermaßen aufgerufen:</p>
<p>aus Hauptprogramm.cpp</p>
<pre><code class="language-cpp">case 4 :
				adressen_sortieren(user, UserAnzahl);
				cout &lt;&lt; &quot;Alle Adressen wurden namentlich sortiert.&quot;;
				cout &lt;&lt; endl &lt;&lt; endl;
				system(&quot;PAUSE&quot;);
				break;
</code></pre>
<p>Die int - Variable &quot;UserAnzahl&quot; wird hochgezählt, wenn eine Adresse angelegt wird. Beträgt sie in dem Fall also 2, werden der Funktion die Struktur und die Anzahl der angelegten User mitgegeben.</p>
<p>Das Programm selbst spuckt mir keinen Fehler aus. Allerdings werden die Namen nach der Sortierungsfunktion nicht sortiert, sondern im üblichen Zustand wieder gegeben.</p>
<p>Warum zur Hölle funktioniert das nicht? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Vielen Dank schonmal<br />
MFG root</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/228078/funktion-qsort-struktur-nach-eingabe-sortieren</link><generator>RSS for Node</generator><lastBuildDate>Tue, 29 Sep 2026 17:55:25 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/228078.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 23 Nov 2008 19:02:32 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Funktion qsort .. Struktur nach Eingabe sortieren on Sun, 23 Nov 2008 19:04:46 GMT]]></title><description><![CDATA[<p>Hallo zusammen,<br />
ich komme im Moment einfach nicht weiter und brauche Hilfe von erfahrenen Programmierern.</p>
<p>Ich sitze momentan an einer kleinen Adressenverwaltung.</p>
<p>Der Benutzer gibt über ein Menü in eine Struktur seine Daten ein.<br />
Diese Struktur sieht so aus:</p>
<p>Struktur.h</p>
<pre><code class="language-cpp">#ifndef STRUKTUR_H
#define STRUKTUR_H

struct TAdressen {
	char Vorname[40 + 1];
	char Nachname[40 + 1];
	char Strasse[80 + 3];
	char Hausnummer[3 + 1];
	char Postleitzahl[5 + 1];
	char Stadt[50 + 1];
};

#endif
</code></pre>
<p>Alles eingegeben, soweit, so gut, möchte ich nun, dass der Benutzer per Menü die Adressen nach Nachnamen sortieren kann.</p>
<p>AdressenSortieren.cpp</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &quot;Struktur.h&quot;
#include &quot;Funktionen.h&quot;

using namespace std;

int vergleich(const void * a, const void * b) {
	if( (const TAdressen *) a &lt;  (const TAdressen *) b ) return -1;
	if( (const TAdressen *) a == (const TAdressen *) b ) return 0;
	if( (const TAdressen *) a &gt;  (const TAdressen *) b ) return 1;

	return 0;
}

TAdressen * adressen_sortieren(TAdressen * user, int UserAnzahl)
{
	qsort(user-&gt;Nachname, UserAnzahl, sizeof(TAdressen), vergleich);

	return user;
}
</code></pre>
<p>Die Funktion adressen_sortieren wird folgendermaßen aufgerufen:</p>
<p>aus Hauptprogramm.cpp</p>
<pre><code class="language-cpp">case 4 :
				adressen_sortieren(user, UserAnzahl);
				cout &lt;&lt; &quot;Alle Adressen wurden namentlich sortiert.&quot;;
				cout &lt;&lt; endl &lt;&lt; endl;
				system(&quot;PAUSE&quot;);
				break;
</code></pre>
<p>Die int - Variable &quot;UserAnzahl&quot; wird hochgezählt, wenn eine Adresse angelegt wird. Beträgt sie in dem Fall also 2, werden der Funktion die Struktur und die Anzahl der angelegten User mitgegeben.</p>
<p>Das Programm selbst spuckt mir keinen Fehler aus. Allerdings werden die Namen nach der Sortierungsfunktion nicht sortiert, sondern im üblichen Zustand wieder gegeben.</p>
<p>Warum zur Hölle funktioniert das nicht? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Vielen Dank schonmal<br />
MFG root</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1619582</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1619582</guid><dc:creator><![CDATA[root2k]]></dc:creator><pubDate>Sun, 23 Nov 2008 19:04:46 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion qsort .. Struktur nach Eingabe sortieren on Sun, 23 Nov 2008 20:26:02 GMT]]></title><description><![CDATA[<p>Niemand ne Ahnung?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1619617</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1619617</guid><dc:creator><![CDATA[root2k]]></dc:creator><pubDate>Sun, 23 Nov 2008 20:26:02 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion qsort .. Struktur nach Eingabe sortieren on Sun, 23 Nov 2008 20:34:38 GMT]]></title><description><![CDATA[<p>root2k schrieb:</p>
<blockquote>
<p>brauche Hilfe von erfahrenen Programmierern.</p>
</blockquote>
<p>Nicht gleich übertreiben! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Scheint als hättest du die Verwendung von qsort noch nicht richtig verstanden.</p>
<p>qsort(user-&gt;Nachname, UserAnzahl, sizeof(TAdressen), vergleich);</p>
<p>1. Der erste Parameter ist ein Zeiger auf das erste zu sortierenden Element. In deinem Fall z.B. ein Zeiger auf das erste Element eines TAdressen-Arrays.</p>
<p>2. Die Funktion vergleich muss bestimmen welches der Elemente größer, kleiner oder gleich ist. In deinem Fall sollte die Funktion einen lexikalischen Vergleich zwischen den Nachnamen zweier TAdressen-Objekte durchführen. Du hingegen vergleichst nur die Speicheradressen der Objekte.</p>
<p>3. Bereite dich darauf vor Kritik abzubekommen, weil das C und nicht C++ ist. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1619618</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1619618</guid><dc:creator><![CDATA[qsorter]]></dc:creator><pubDate>Sun, 23 Nov 2008 20:34:38 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion qsort .. Struktur nach Eingabe sortieren on Sun, 23 Nov 2008 20:53:35 GMT]]></title><description><![CDATA[<p>Hmm... Was ist denn daran nicht C++?<br />
Würde mich mal interessieren... Fände ich ziemlich krass, denn auf meinem Berufskolleg wird angegeben, dass ich C++ lerne und nicht C... sollte das tatsächlich der Fall sein, sprech ich morgen mal meinen Programmierlehrer drauf an.</p>
<p>Wie schaffe ich es, einen lexikalischen Vergleich durchzuführen?</p>
<p>Übrigens, das mit den erfahrenen Programmierern, soll heißen, dass ich nicht erfahren bin <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1619623</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1619623</guid><dc:creator><![CDATA[root2k]]></dc:creator><pubDate>Sun, 23 Nov 2008 20:53:35 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion qsort .. Struktur nach Eingabe sortieren on Sun, 23 Nov 2008 20:56:31 GMT]]></title><description><![CDATA[<p>root2k schrieb:</p>
<blockquote>
<p>Hmm... Was ist denn daran nicht C++?<br />
Würde mich mal interessieren...</p>
</blockquote>
<p>In C++ gibt es eine bessere Alternativen als <code>qsort()</code> , nämlich den STL-Algorithmus <code>std::sort()</code> (Header <code>&lt;algorithm&gt;</code> ).</p>
<p>Zudem wären Referenzen hier besser geeignet als Zeiger. Und Zeiger auf <code>void</code> ? Lieber nicht. Wieso brauchst du die überhaupt, wenn du sie sowieso gleich wieder castest? Du kannst ja direkt Zeiger auf <code>TAdressen</code> übergeben (oder eben Referenzen).</p>
<p>root2k schrieb:</p>
<blockquote>
<p>Wie schaffe ich es, einen lexikalischen Vergleich durchzuführen?</p>
</blockquote>
<p>Wenn du mit <code>std::string</code> arbeitest (was ich dir rate), hast du die Methode <code>compare()</code> zur Verfügung.</p>
<p>Schau sonst auch mal bei <a href="http://www.cplusplus.com" rel="nofollow">www.cplusplus.com</a> nach...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1619628</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1619628</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 23 Nov 2008 20:56:31 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion qsort .. Struktur nach Eingabe sortieren on Sun, 23 Nov 2008 21:10:36 GMT]]></title><description><![CDATA[<p>Vielen Dank erstmal, ich setz mich da mal ran.</p>
<p>Übrigens: ich hab jetzt schon öfter diese Präfix gesehen: &quot;std::&quot;</p>
<p>Auf dem Kolleg haben wir davon nie etwas beigebracht bekommen... Hast du da eine nette Seite für mich, außer der englischen Reference?</p>
<p>Sollte man vor Ausdrücken wie cout, cin, etc. immer std:: setzen, oder ist das mit der passenden Bibliothek überflüssig?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1619634</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1619634</guid><dc:creator><![CDATA[root2k]]></dc:creator><pubDate>Sun, 23 Nov 2008 21:10:36 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion qsort .. Struktur nach Eingabe sortieren on Sun, 23 Nov 2008 21:20:38 GMT]]></title><description><![CDATA[<p>Grundsätzlich ist alles aus der C++-Standardbibliothek im Namensraum <code>std</code> . Das heisst, eigentlich müsste man vor jede Funktion, jeden Typ und jedes Objekt <code>std::</code> schreiben. Mit der Anweisung <code>using namespace std;</code> macht man den Namensraum aber bekannt und kann sich so die Präfixe sparen.</p>
<p>Und die englische Referenz ist recht gut, vor allem wenn du dich eingehender mit C++ beschäftigst. Ansonsten gibt es für den Moment gerade noch ein zu empfehlendes <a href="http://tutorial.schornboeck.net/inhalt.htm" rel="nofollow">Tutorial</a>.</p>
<p>Oder du kaufst dir Bücher wie C++-Primer oder Thinking in C++, wobei letzteres auch gratis als Online-PDF erhältlich ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1619638</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1619638</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 23 Nov 2008 21:20:38 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion qsort .. Struktur nach Eingabe sortieren on Sun, 23 Nov 2008 21:22:04 GMT]]></title><description><![CDATA[<p>Wow... vielen Dank, damit hast du mir echt geholfen.<br />
Ich arbeite mich da mal durch ...</p>
<p>MFG root</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1619643</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1619643</guid><dc:creator><![CDATA[root2k]]></dc:creator><pubDate>Sun, 23 Nov 2008 21:22:04 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion qsort .. Struktur nach Eingabe sortieren on Sun, 23 Nov 2008 21:47:54 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Wieso brauchst du die überhaupt, wenn du sie sowieso gleich wieder castest? Du kannst ja direkt Zeiger auf <code>TAdressen</code> übergeben (oder eben Referenzen).</p>
</blockquote>
<p>Weil das qsort so verlangt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1619660</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1619660</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 23 Nov 2008 21:47:54 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion qsort .. Struktur nach Eingabe sortieren on Sun, 23 Nov 2008 22:07:16 GMT]]></title><description><![CDATA[<p>Ich weiß, ich hab jetzt nicht allzu lang geschaut, aber ich komm einfach nicht weiter und muss das morgen in der Klausur zeigen können.</p>
<p>über std::sort weiß ich jetzt:</p>
<pre><code class="language-cpp">#include &lt;algorithm&gt;
#include &lt;iostream&gt;

using namespace std;

int main()
{
  int array[4] = {4, 2, 3, 1};

  sort(array, array + 4);

  for(int i = 0; i &lt; (sizeof(array)/sizeof(int)); i++)
  {
    cout &lt;&lt; array[i] &lt;&lt; &quot;  &quot;;
  }

  cin.get();
}
</code></pre>
<p>So würde ein Array von 4 Feldern nach Größe sortiert werden.</p>
<p>Aber wie setze ich das mit meiner Struktur um? Ich will ja bloß nach Nachnamen sortieren, meinetwegen nach dem Anfangsbuchstaben des Nachnamens (also user.Nachname[0])</p>
<p>Wenn einer weiß wie das geht... ich bitte drum, sagts mir <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1619668</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1619668</guid><dc:creator><![CDATA[root2k]]></dc:creator><pubDate>Sun, 23 Nov 2008 22:07:16 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion qsort .. Struktur nach Eingabe sortieren on Sun, 23 Nov 2008 22:57:17 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;
#include &quot;Struktur.h&quot;
#include &quot;Funktionen.h&quot;

using namespace std;

int vergleich(const void * a, const void * b)
{
	const TAdressen * pa;
	const TAdressen * pb;

	pa = (const TAdressen *) a;
	pb = (const TAdressen *) b;

	if(strcmp(pa-&gt;Nachname, pb-&gt;Nachname) == -1)
		return -1;
	if(strcmp(pa-&gt;Nachname, pb-&gt;Nachname) == 1)
		return 1;
	if(strcmp(pa-&gt;Nachname, pb-&gt;Nachname) == 0)
		return 0;

	return 0;
}

TAdressen * adressen_sortieren(TAdressen * user, int UserAnzahl)
{
	qsort(user, 100, sizeof(TAdressen), vergleich);

	return user;
}
</code></pre>
<p>Damit funktionierts... Trotzdem danke für eure Hilfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1619677</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1619677</guid><dc:creator><![CDATA[root2k]]></dc:creator><pubDate>Sun, 23 Nov 2008 22:57:17 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion qsort .. Struktur nach Eingabe sortieren on Mon, 24 Nov 2008 00:21:15 GMT]]></title><description><![CDATA[<p>Falls dich das jetzt nach der Klausur noch interessiert :):</p>
<pre><code class="language-cpp">struct Adresse {
    std::string Vorname;
    std::string Nachname;
    std::string Strasse;
    std::string Hausnummer;
    std::string Postleitzahl;
    std::string Stadt;
};

..
bool cmpVorname( const Adresse&amp; a, const Adresse&amp; b )
{
    return a.Vorname &lt; b.Vorname;
}
..

// Anlegen und irgendwie füllen
Adresse addr[20];

// Sortieren
std::sort( &amp;addr[0], &amp;addr[20], cmpVorname );
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1619695</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1619695</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Mon, 24 Nov 2008 00:21:15 GMT</pubDate></item></channel></rss>