<?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[Einordnen von Elementen in eine Liste]]></title><description><![CDATA[<p>Hallo, schön dass es das Forum hier gibt, vielleicht könnt ihr mir ja auch helfen.</p>
<p>Wir sollen bei uns im Studium aus einer Liste mit ungeordneten Elementen jeweils das erste Element herauslösen und in eine neue Liste lexikographisch einordnen.<br />
Irgendwie habe ich wahrscheinlich einen Denkfehler, denn es funktioniert nicht.<br />
Ich zeige euch mal den gesamten Code, die Funktion 'out_order_in' ist die Funktion wo neu eingeordnet werden kann.</p>
<pre><code>#include&lt;iostream&gt;
#include&lt;string.h&gt;
using namespace std;

struct list {
	list *next;
	char *string;
};

void getlines(list *lines);
void printlines(list *lines, int argc, char **argv);
void out_order_in(list *lines, list *ordered_lines);

int main(int argc, char **argv) {
	list *line = new list;
	list *ordered_line = new list;
	ordered_line = NULL;
	cout &lt;&lt; &quot;Es wird eingelesen...&quot;;
	getlines(line);
	cout &lt;&lt; &quot;[fertig]&quot; &lt;&lt; endl;
	cout &lt;&lt; &quot;Es wird eingeordnet...&quot;;
	out_order_in(line,ordered_line);
	cout &lt;&lt; &quot;[fertig]&quot; &lt;&lt; endl;
	cout &lt;&lt; &quot;Es wird ausgegeben...&quot;;
	printlines(ordered_line, argc, argv);
	cout &lt;&lt; &quot;[fertig]&quot; &lt;&lt; endl;
	//printlines(line, argc, argv);
}

void out_order_in(list *line, list *ordered_line) {

	list *start = new list;
	list *prev = new list;
	start=NULL,prev=NULL;
	while(line!=NULL) {
		list *totakeoff = new list;
		if(ordered_line == NULL) {
			ordered_line = line;
			prev = ordered_line;
			start = ordered_line;
			ordered_line-&gt;next = new list;
		}
		else {
			while(ordered_line != NULL) {
				if(strcmp(line-&gt;string, ordered_line-&gt;string)&lt;0) {
					prev = line;
					line = ordered_line;
					ordered_line = ordered_line-&gt;next;
				}
				else if(strcmp(line-&gt;string, ordered_line-&gt;string)&gt;0) {
					ordered_line = line;
					line = ordered_line-&gt;next;
					prev = ordered_line;
				}
			}
		}

		totakeoff = line;
		line = line-&gt;next;
		delete totakeoff;
		ordered_line = start;
	}

}

void getlines(list *line) {
	char input[100];
	bool first_line = true;

	while(gets(input)!=NULL) {
		if(first_line==false) {
			line-&gt;next = new list;
			line = line-&gt;next;
		}
		line-&gt;string = (char *)malloc(strlen(input)+1);
		strcpy(line-&gt;string,input);
		line-&gt;next = NULL;
		first_line = false;
	}
}

void printlines(list *line, int argc, char **argv) {
	if (argc &gt; 1) {
		cout &lt;&lt; &quot;\nAusgabe der Suchliste:\n&quot; &lt;&lt; endl;
		int list_element = 1;
		while(line!=NULL) {
			if(strstr(line-&gt;string,argv[1])) {
				cout &lt;&lt; &quot;[&quot; &lt;&lt; list_element &lt;&lt; &quot;] &quot; &lt;&lt; line-&gt;string &lt;&lt; endl;
			}
			line = line-&gt;next;
			list_element++;
		}
	}
	else {
		cout &lt;&lt; &quot;\nAusgabe der geordneten Liste:\n&quot; &lt;&lt; endl;
		while(line!=NULL) {
			cout &lt;&lt; line-&gt;string &lt;&lt; endl;
			line = line-&gt;next;
		}
	}
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/129728/einordnen-von-elementen-in-eine-liste</link><generator>RSS for Node</generator><lastBuildDate>Wed, 26 Aug 2026 09:36:37 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/129728.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 16 Dec 2005 09:20:55 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Einordnen von Elementen in eine Liste on Fri, 16 Dec 2005 10:03:55 GMT]]></title><description><![CDATA[<p>Hallo, schön dass es das Forum hier gibt, vielleicht könnt ihr mir ja auch helfen.</p>
<p>Wir sollen bei uns im Studium aus einer Liste mit ungeordneten Elementen jeweils das erste Element herauslösen und in eine neue Liste lexikographisch einordnen.<br />
Irgendwie habe ich wahrscheinlich einen Denkfehler, denn es funktioniert nicht.<br />
Ich zeige euch mal den gesamten Code, die Funktion 'out_order_in' ist die Funktion wo neu eingeordnet werden kann.</p>
<pre><code>#include&lt;iostream&gt;
#include&lt;string.h&gt;
using namespace std;

struct list {
	list *next;
	char *string;
};

void getlines(list *lines);
void printlines(list *lines, int argc, char **argv);
void out_order_in(list *lines, list *ordered_lines);

int main(int argc, char **argv) {
	list *line = new list;
	list *ordered_line = new list;
	ordered_line = NULL;
	cout &lt;&lt; &quot;Es wird eingelesen...&quot;;
	getlines(line);
	cout &lt;&lt; &quot;[fertig]&quot; &lt;&lt; endl;
	cout &lt;&lt; &quot;Es wird eingeordnet...&quot;;
	out_order_in(line,ordered_line);
	cout &lt;&lt; &quot;[fertig]&quot; &lt;&lt; endl;
	cout &lt;&lt; &quot;Es wird ausgegeben...&quot;;
	printlines(ordered_line, argc, argv);
	cout &lt;&lt; &quot;[fertig]&quot; &lt;&lt; endl;
	//printlines(line, argc, argv);
}

void out_order_in(list *line, list *ordered_line) {

	list *start = new list;
	list *prev = new list;
	start=NULL,prev=NULL;
	while(line!=NULL) {
		list *totakeoff = new list;
		if(ordered_line == NULL) {
			ordered_line = line;
			prev = ordered_line;
			start = ordered_line;
			ordered_line-&gt;next = new list;
		}
		else {
			while(ordered_line != NULL) {
				if(strcmp(line-&gt;string, ordered_line-&gt;string)&lt;0) {
					prev = line;
					line = ordered_line;
					ordered_line = ordered_line-&gt;next;
				}
				else if(strcmp(line-&gt;string, ordered_line-&gt;string)&gt;0) {
					ordered_line = line;
					line = ordered_line-&gt;next;
					prev = ordered_line;
				}
			}
		}

		totakeoff = line;
		line = line-&gt;next;
		delete totakeoff;
		ordered_line = start;
	}

}

void getlines(list *line) {
	char input[100];
	bool first_line = true;

	while(gets(input)!=NULL) {
		if(first_line==false) {
			line-&gt;next = new list;
			line = line-&gt;next;
		}
		line-&gt;string = (char *)malloc(strlen(input)+1);
		strcpy(line-&gt;string,input);
		line-&gt;next = NULL;
		first_line = false;
	}
}

void printlines(list *line, int argc, char **argv) {
	if (argc &gt; 1) {
		cout &lt;&lt; &quot;\nAusgabe der Suchliste:\n&quot; &lt;&lt; endl;
		int list_element = 1;
		while(line!=NULL) {
			if(strstr(line-&gt;string,argv[1])) {
				cout &lt;&lt; &quot;[&quot; &lt;&lt; list_element &lt;&lt; &quot;] &quot; &lt;&lt; line-&gt;string &lt;&lt; endl;
			}
			line = line-&gt;next;
			list_element++;
		}
	}
	else {
		cout &lt;&lt; &quot;\nAusgabe der geordneten Liste:\n&quot; &lt;&lt; endl;
		while(line!=NULL) {
			cout &lt;&lt; line-&gt;string &lt;&lt; endl;
			line = line-&gt;next;
		}
	}
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/943336</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/943336</guid><dc:creator><![CDATA[mac_bobby]]></dc:creator><pubDate>Fri, 16 Dec 2005 10:03:55 GMT</pubDate></item><item><title><![CDATA[Reply to Einordnen von Elementen in eine Liste on Fri, 16 Dec 2005 09:24:01 GMT]]></title><description><![CDATA[<p>Du musst Strings mit strcmp vergleichen, mit &lt; vergleichst Du nur die Adressen im Speicher...</p>
<pre><code class="language-cpp">if(strcmp(line-&gt;string, ordered_line-&gt;string)&lt;0)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/943339</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/943339</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Fri, 16 Dec 2005 09:24:01 GMT</pubDate></item><item><title><![CDATA[Reply to Einordnen von Elementen in eine Liste on Fri, 16 Dec 2005 09:34:48 GMT]]></title><description><![CDATA[<p>OK, danke, aber es geht immernoch nicht, sieht so aus, als ob er jetzt in einer endlosschleife steckt, denn er macht nicht weiter bzw. sehe ich nur einen blinkenden consolencursor !!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/943343</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/943343</guid><dc:creator><![CDATA[mac_bobby]]></dc:creator><pubDate>Fri, 16 Dec 2005 09:34:48 GMT</pubDate></item><item><title><![CDATA[Reply to Einordnen von Elementen in eine Liste on Fri, 16 Dec 2005 12:03:33 GMT]]></title><description><![CDATA[<p>Die Funktion ist ein einziger Krampf:<br />
* deine new's sind komplett überflüssig, weil du die entsprechenden Zeiger vor Verwendung wieder überschreibst.<br />
* du iterierst mit 'line' durch die ordered_line - damit dürfte spätestens am Ende des zweiten Schleifendurchgangs die Originalliste futsch sein und du die bisherigen Elemente der ordered_line pausenlos.<br />
* ordered_line soll etwas zurückgeben, da benötigst du Referenzen oder Doppelpointer.<br />
*...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/943469</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/943469</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 16 Dec 2005 12:03:33 GMT</pubDate></item><item><title><![CDATA[Reply to Einordnen von Elementen in eine Liste on Fri, 16 Dec 2005 14:16:14 GMT]]></title><description><![CDATA[<p>das ist weitestgehend C mit einigen C++ elementen (und ausgerechent denen, die für sich genommen nur geringe vorteile haben - cout,new).<br />
nunja:</p>
<pre><code class="language-cpp">#include&lt;iostream&gt;
#include&lt;string.h&gt;
using namespace std;
</code></pre>
<p>ok, allerdings, ähm... deprecated... beser:</p>
<pre><code class="language-cpp">#include&lt;iostream&gt;
#include&lt;cstring&gt;
using namespace std;
</code></pre>
<p>noch besser:</p>
<pre><code class="language-cpp">#include&lt;iostream&gt;
#include&lt;string&gt;
using namespace std;
</code></pre>
<p>und du verwendest strings und verzichtest auf char-arrays</p>
<pre><code class="language-cpp">list *start = new list;
    list *prev = new list;
    start=NULL,prev=NULL;
</code></pre>
<p>ich bin mir sicher, du weisst nicht, was du hier tust...</p>
<pre><code class="language-cpp">void out_order_in(list *line, list *ordered_line) {

    list *start = new list;
    list *prev = new list;
    start=NULL,prev=NULL;
    while(line!=NULL) {
        list *totakeoff = new list;
        if(ordered_line == NULL) {
            ordered_line = line;
            prev = ordered_line;
            start = ordered_line;
            ordered_line-&gt;next = new list;
        }
        else {
            while(ordered_line != NULL) {
                if(strcmp(line-&gt;string, ordered_line-&gt;string)&lt;0) {
                    prev = line;
                    line = ordered_line;
                    ordered_line = ordered_line-&gt;next;
                }
                else if(strcmp(line-&gt;string, ordered_line-&gt;string)&gt;0) {
                    ordered_line = line;
                    line = ordered_line-&gt;next;
                    prev = ordered_line;
                }
            }
        }

        totakeoff = line;
        line = line-&gt;next;
        delete totakeoff;
        ordered_line = start;
    }

}
</code></pre>
<p>man kann kaum erahnen, was hier passieren soll... der sinn von prev bleibt jedenfalls im dunkeln, denn genutzt wird es nie<br />
im übrigen besteht hier auf jedenfall die chance einer endlos schleife, falls du zwei gleiche einträge hast, denn dann ist weder</p>
<pre><code class="language-cpp">if(strcmp(line-&gt;string, ordered_line-&gt;string)&lt;0) {
</code></pre>
<p>noch</p>
<pre><code class="language-cpp">else if(strcmp(line-&gt;string, ordered_line-&gt;string)&gt;0) {
</code></pre>
<p>zutreffend (bzw. selbiges falls line und odered_line zufällig mal gleich sind). andererseits ist das sowieso UB, denn:</p>
<pre><code class="language-cpp">ordered_line = line;
// ...
            ordered_line-&gt;next = new list;
// ...
        line = line-&gt;next;
</code></pre>
<p>und im nächsten durchgang verwendest du fröhlich line-&gt;string, obwohl nichts initialisiert wurde.</p>
<pre><code class="language-cpp">while(gets(input)!=NULL) {
</code></pre>
<p>gets ist böse, richtig, richtig böse...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/943554</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/943554</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 16 Dec 2005 14:16:14 GMT</pubDate></item></channel></rss>