<?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[position phrasen sortieren]]></title><description><![CDATA[<p>Hallo zusammen, hoffentlich kann mir hier jemand helfen:</p>
<p>Ich habe einen Text in dem ich immer 3 Wörter zu einer Phrasen zusammengenommen habe.<br />
Die jeweiligen Positionen des Anfangs jeder Phrase habe ich in einem eigenen Vektor gespeichert.</p>
<p>Ich versuche gerade, die Postionion in letzerem Vektor zu sortieren, so dass die phrasen am ende alphabetisch geordnet sind (also wenn z.b die phrase die bei 4 anfängt alphabetisch vor der die bei 8 ist ist, dann soll die 8 nacher vor der 4 stehen). Funktioniert leider nicht so ganz:</p>
<p>vorher:<br />
0 16 44 67 94 107 121 142 164 183 200 230 248 272 290 309 328 344 359 385 415 42<br />
9 446 470 492 509 533 554 587 600 615 635 663 685 710 732 752 771 804 824 868 90<br />
5 937 971 984</p>
<p>nacher:<br />
31 29 19 16 16 9 40 27 39 21 10 24 24 24 23 23 23 21 25 41 23 23 23 38 34 34 34<br />
30 29 35 35 35 40 40 40 40 40 44 44 41 41 41 44 44 43</p>
<p>Hier mein Code, zuerst die Hilfsfunktion dann ein selection sort<br />
ich ziehe praktisch den char an der Postion der zweiten phrasen von dem der ersten ab und wenn zweiterer im alphabet vorne liegt sollte ja eigentlich ein positver wert zurückgegeben werden weil der ascii kleiner is</p>
<p>int vergleiche_n_woerter(int i, int j, vector &lt;char&gt; text) {</p>
<p>if (text[i]- text[j]==0) {<br />
++i;<br />
++j;<br />
}<br />
else {<br />
return text[i] - text[j];<br />
}</p>
<p>}</p>
<p>void sortiere_phrasen(vector&lt;int&gt; &amp; phrasen, vector&lt;char&gt; text) {<br />
for (int i(0); i &lt; phrasen.size() - 1; ++i) {<br />
int k(i);<br />
for (int j(i + 1); j &lt; phrasen.size(); ++j) {<br />
int ret(vergleiche_n_woerter(phrasen[k], phrasen[j], text));<br />
if (ret &gt; 0) {<br />
k = j;<br />
}<br />
}<br />
int x(i);<br />
phrasen[i] = k;<br />
phrasen[k] = x;<br />
}<br />
}</p>
<p>Danke, falls irgendwer bis hier gelesen haben sollte <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/topic/336604/position-phrasen-sortieren</link><generator>RSS for Node</generator><lastBuildDate>Sun, 19 Apr 2026 07:02:14 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/336604.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 02 Feb 2016 17:37:47 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to position phrasen sortieren on Tue, 02 Feb 2016 17:37:47 GMT]]></title><description><![CDATA[<p>Hallo zusammen, hoffentlich kann mir hier jemand helfen:</p>
<p>Ich habe einen Text in dem ich immer 3 Wörter zu einer Phrasen zusammengenommen habe.<br />
Die jeweiligen Positionen des Anfangs jeder Phrase habe ich in einem eigenen Vektor gespeichert.</p>
<p>Ich versuche gerade, die Postionion in letzerem Vektor zu sortieren, so dass die phrasen am ende alphabetisch geordnet sind (also wenn z.b die phrase die bei 4 anfängt alphabetisch vor der die bei 8 ist ist, dann soll die 8 nacher vor der 4 stehen). Funktioniert leider nicht so ganz:</p>
<p>vorher:<br />
0 16 44 67 94 107 121 142 164 183 200 230 248 272 290 309 328 344 359 385 415 42<br />
9 446 470 492 509 533 554 587 600 615 635 663 685 710 732 752 771 804 824 868 90<br />
5 937 971 984</p>
<p>nacher:<br />
31 29 19 16 16 9 40 27 39 21 10 24 24 24 23 23 23 21 25 41 23 23 23 38 34 34 34<br />
30 29 35 35 35 40 40 40 40 40 44 44 41 41 41 44 44 43</p>
<p>Hier mein Code, zuerst die Hilfsfunktion dann ein selection sort<br />
ich ziehe praktisch den char an der Postion der zweiten phrasen von dem der ersten ab und wenn zweiterer im alphabet vorne liegt sollte ja eigentlich ein positver wert zurückgegeben werden weil der ascii kleiner is</p>
<p>int vergleiche_n_woerter(int i, int j, vector &lt;char&gt; text) {</p>
<p>if (text[i]- text[j]==0) {<br />
++i;<br />
++j;<br />
}<br />
else {<br />
return text[i] - text[j];<br />
}</p>
<p>}</p>
<p>void sortiere_phrasen(vector&lt;int&gt; &amp; phrasen, vector&lt;char&gt; text) {<br />
for (int i(0); i &lt; phrasen.size() - 1; ++i) {<br />
int k(i);<br />
for (int j(i + 1); j &lt; phrasen.size(); ++j) {<br />
int ret(vergleiche_n_woerter(phrasen[k], phrasen[j], text));<br />
if (ret &gt; 0) {<br />
k = j;<br />
}<br />
}<br />
int x(i);<br />
phrasen[i] = k;<br />
phrasen[k] = x;<br />
}<br />
}</p>
<p>Danke, falls irgendwer bis hier gelesen haben sollte <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/2485630</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2485630</guid><dc:creator><![CDATA[Xända]]></dc:creator><pubDate>Tue, 02 Feb 2016 17:37:47 GMT</pubDate></item><item><title><![CDATA[Reply to position phrasen sortieren on Tue, 02 Feb 2016 18:28:05 GMT]]></title><description><![CDATA[<p>Die Funktion vergleiche_n_woerter ist blödsin:</p>
<ol>
<li>eine Funktion muss in jedem Fall einen Wert liefern, deine tut es nur im else</li>
<li>i und j um 1 zu erhöhen hat keinerlei Auswirkungen im weiteren Programm (Stichwort call by value)</li>
</ol>
]]></description><link>https://www.c-plusplus.net/forum/post/2485636</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2485636</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Tue, 02 Feb 2016 18:28:05 GMT</pubDate></item><item><title><![CDATA[Reply to position phrasen sortieren on Tue, 02 Feb 2016 19:56:10 GMT]]></title><description><![CDATA[<p>Hallo Xända,</p>
<p>Xända schrieb:</p>
<blockquote>
<pre><code>int vergleiche_n_woerter(int i, int j, vector &lt;char&gt; text) {
	
		if (text[i]- text[j]==0) {
			++i;
			++j;
		}
		else {
			return text[i] - text[j];
		}
	}

void sortiere_phrasen(vector&lt;int&gt; &amp; phrasen, vector&lt;char&gt; text) {
	for (int i(0); i &lt; phrasen.size() - 1; ++i) {
		int k(i);
		for (int j(i + 1); j &lt; phrasen.size(); ++j) {
			int ret(vergleiche_n_woerter(phrasen[k], phrasen[j], text));
			if (ret &gt; 0) {
				k = j;
			}
		}
			int x(i);
			phrasen[i] = k;
			phrasen[k] = x;
	}
}
</code></pre>
</blockquote>
<p>Abgesehen davon, dass die Variablen <code>i</code> und <code>j</code> in <code>vergleiche_n_woerter</code> keinerlei Wirkung haben, verwechselst Du in <code>sortiere_phrasen</code> den Index in den Vektor ( <code>i,k</code> ) mit dem Inhalt des Vektors ( <code>phrasen[i]</code> ). Es ist sinnlos diese einander zuzuweisen.</p>
<p>Grob korrigiert, könnte Dein Code so aussehen:</p>
<pre><code>bool vergleiche_n_woerter(int i, int j, vector&lt;char&gt; text) {
    return text[i] &lt; text[j]; // true falls *i vor *j liegen soll
    }

void sortiere_phrasen( vector&lt;int&gt; &amp; phrasen, vector&lt;char&gt; text) {
    for (int i(0); i &lt; phrasen.size() - 1; ++i) {
        for (int j(i + 1); j &lt; phrasen.size(); ++j) {
            if( vergleiche_n_woerter( phrasen[j], phrasen[j-1], text ) ) { // Reihenfolge passt nicht
                auto tmp = phrasen[j];          // dann tausche phrasen[j-1] mit phrasen[j]
                phrasen[j] = phrasen[j-1];
                phrasen[j-1] = tmp;
            }
        }
    }
}
</code></pre>
<p>Noch besser wäre es, den Algorithmus <code>std::sort</code> zu nutzen. Du benötigst lediglich einen Funktor, der beim Vergleich von zwei Indizes <code>true</code> liefert, falls der erste vor dem zweiten liegen soll. Etwa so:</p>
<pre><code>sort( begin(phrasen), end(phrasen), [&amp;text]( int p1, int p2 )-&gt;bool { return text[p1] &lt; text[p2]; } );
</code></pre>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2485646</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2485646</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Tue, 02 Feb 2016 19:56:10 GMT</pubDate></item><item><title><![CDATA[Reply to position phrasen sortieren on Tue, 02 Feb 2016 20:49:34 GMT]]></title><description><![CDATA[<p>jawohl, funktioniert jetzt, danke Vielmals für eure hilfe <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/2485652</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2485652</guid><dc:creator><![CDATA[Xända]]></dc:creator><pubDate>Tue, 02 Feb 2016 20:49:34 GMT</pubDate></item></channel></rss>