<?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[Substrings innerhalb einen String sortieren]]></title><description><![CDATA[<p>Hallo.<br />
Bin ganz neu in C++.<br />
Wie löse ich am effektivsten folgende Aufgabe:</p>
<p>Mehrere Strings müssen nach Substrings sortiert werden.</p>
<p>Stringsbeispiele:</p>
<p>&quot;[8A][Dings da][Orange-Blau]&quot;<br />
&quot;[MOD][Weiss][UKE]&quot;<br />
&quot;[GF][MOD3][Dings da]&quot;<br />
&quot;[MOD][Black][UKE]&quot;</p>
<p>Es gibt mehrere Gruppen von Substrings:</p>
<ol>
<li>
<p>Gruppe:<br />
&quot;[8A]&quot;<br />
&quot;[UKE]&quot;</p>
</li>
<li>
<p>Gruppe.<br />
&quot;[Dings da]&quot;<br />
&quot;[DingsBums]&quot;</p>
</li>
<li>
<p>Gruppe.<br />
&quot;[GF]&quot;<br />
&quot;[MOD]&quot;<br />
&quot;[MOD3]&quot;<br />
&quot;[MOD6]&quot;</p>
</li>
<li>
<p>Gruppe.<br />
&quot;[Weiss]&quot;<br />
&quot;[Rot]&quot;<br />
&quot;[Orange-Blau]&quot;</p>
</li>
</ol>
<p>Die Substrings müssen innerhab des Stringes nach Gruppenrang sortiert werden. Der String darf nur einen Substring aus einer Gruppe beinhalten.</p>
<p>Beispiele:<br />
&quot;[8A][Dings da][Orange-Blau]&quot;   -&gt; &quot;[8A][Dings da][Orange-Blau]&quot;<br />
&quot;[MOD][Weiss][UKE]&quot;                  -&gt; &quot;[UKE][MOD][Weiss]&quot;<br />
&quot;[GF][MOD3][Dings da]&quot;            -&gt; <strong>Fehler</strong> - [GF] und [MOD3] sind beide aus der Gruppe 3!<br />
&quot;[MOD][Black][UKE]&quot;                  -&gt; <strong>Fehler</strong> - [Black] ist nicht in den Substrings vorhanden!</p>
<p>Löse ich die Aufgabe am besten mit einem Container oder C-Array? Falls Container, welcher Art: vector, map, multimap usw.?<br />
Und das wichtigste: wie am effektivsten (Algorithmus)?</p>
<p>Im Voraus besten Dank!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/355457/substrings-innerhalb-einen-string-sortieren</link><generator>RSS for Node</generator><lastBuildDate>Tue, 14 Apr 2026 21:50:51 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/355457.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 14 Apr 2026 14:08:02 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Substrings innerhalb einen String sortieren on Tue, 14 Apr 2026 14:11:40 GMT]]></title><description><![CDATA[<p>Hallo.<br />
Bin ganz neu in C++.<br />
Wie löse ich am effektivsten folgende Aufgabe:</p>
<p>Mehrere Strings müssen nach Substrings sortiert werden.</p>
<p>Stringsbeispiele:</p>
<p>&quot;[8A][Dings da][Orange-Blau]&quot;<br />
&quot;[MOD][Weiss][UKE]&quot;<br />
&quot;[GF][MOD3][Dings da]&quot;<br />
&quot;[MOD][Black][UKE]&quot;</p>
<p>Es gibt mehrere Gruppen von Substrings:</p>
<ol>
<li>
<p>Gruppe:<br />
&quot;[8A]&quot;<br />
&quot;[UKE]&quot;</p>
</li>
<li>
<p>Gruppe.<br />
&quot;[Dings da]&quot;<br />
&quot;[DingsBums]&quot;</p>
</li>
<li>
<p>Gruppe.<br />
&quot;[GF]&quot;<br />
&quot;[MOD]&quot;<br />
&quot;[MOD3]&quot;<br />
&quot;[MOD6]&quot;</p>
</li>
<li>
<p>Gruppe.<br />
&quot;[Weiss]&quot;<br />
&quot;[Rot]&quot;<br />
&quot;[Orange-Blau]&quot;</p>
</li>
</ol>
<p>Die Substrings müssen innerhab des Stringes nach Gruppenrang sortiert werden. Der String darf nur einen Substring aus einer Gruppe beinhalten.</p>
<p>Beispiele:<br />
&quot;[8A][Dings da][Orange-Blau]&quot;   -&gt; &quot;[8A][Dings da][Orange-Blau]&quot;<br />
&quot;[MOD][Weiss][UKE]&quot;                  -&gt; &quot;[UKE][MOD][Weiss]&quot;<br />
&quot;[GF][MOD3][Dings da]&quot;            -&gt; <strong>Fehler</strong> - [GF] und [MOD3] sind beide aus der Gruppe 3!<br />
&quot;[MOD][Black][UKE]&quot;                  -&gt; <strong>Fehler</strong> - [Black] ist nicht in den Substrings vorhanden!</p>
<p>Löse ich die Aufgabe am besten mit einem Container oder C-Array? Falls Container, welcher Art: vector, map, multimap usw.?<br />
Und das wichtigste: wie am effektivsten (Algorithmus)?</p>
<p>Im Voraus besten Dank!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2624883</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2624883</guid><dc:creator><![CDATA[Bibigon]]></dc:creator><pubDate>Tue, 14 Apr 2026 14:11:40 GMT</pubDate></item><item><title><![CDATA[Reply to Substrings innerhalb einen String sortieren on Tue, 14 Apr 2026 14:40:28 GMT]]></title><description><![CDATA[<p>Die beste Lösung ist es einen Parser zu schreiben. Wenn es direkt in C++ sein soll, kann man <a href="https://www.boost.org/doc/libs/latest/libs/spirit/doc/html/index.html" rel="nofollow">boost Spirit</a> nutzen. Ansonsten flex/bison, antlr, …</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2624884</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2624884</guid><dc:creator><![CDATA[*john 0]]></dc:creator><pubDate>Tue, 14 Apr 2026 14:40:28 GMT</pubDate></item><item><title><![CDATA[Reply to Substrings innerhalb einen String sortieren on Tue, 14 Apr 2026 14:59:52 GMT]]></title><description><![CDATA[<p>Ist es ausgeschlossen, dass es zu Doppeldeutigkeiten oder fehlende Einträgen bei der Zerlegung kommen kann? Ich nehme im folgenden an, dass dies kein Problem darstellt oder es eine definierte Lösung gibt, aber du solltest mal überlegen, ob das vorkommen kann und wie dies ggf. zu lösen ist.</p>
<p>Nimm auf gar keinen Fall jemals C-Strings oder Arrays für irgendwas, wenn <code>std::string</code> &amp; Co. erlaubt sind!</p>
<p>Von hier aus ist ad-hoc im Kopf programmiert, wie ich das ungefähr machen würde. Ich will dir ja nicht die Aufgabe komplett lösen <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>
<hr />
<p>Du willst im Hintergrund wahrscheinlich eine <code>map&lt;int, vector&lt;string&gt;&gt;</code> haben, wo du deine vorgegebenen Wortgruppen drin gespeichert hast.</p>
<p>Dann beginnst du deinen jeweiligen String zu zerlegen, und merkst dir Paare der Substrings und der Gruppe aus der sie sind. Also vermutlich als <code>vector&lt;pair&lt;string, int&gt;&gt;</code>.  Aus deinem Beispiel &quot;[MOD][Weiss][UKE]&quot; wird also die Paarfolge {(&quot;[MOD]&quot;, 3), (&quot;[Weiss]&quot;, 4), (&quot;[UKE]&quot;, 1)}. Man kann beim Zerlegen auch Mitzählen (auf allerlei Weise), ob und wie oft jede Gruppe vorkommt. Sobald man eine Gruppe zum 2. Mal sieht, kann man mit einem Fehler abbrechen.</p>
<p>Das kannst du dann mit <code>sort</code> nach dem zweiten Teil des Paars sortieren, du bekommst also die Folge {(&quot;[UKE]&quot;, 1), (&quot;[MOD]&quot;, 3), (&quot;[Weiss]&quot;, 4)}</p>
<p>Dann soll daraus ja wieder ein String werden. Dazu hängt man einfach die jeweils erste Hälfte der Paare wieder zu einem String zusammen. Spätestens dabei muss man aber prüfen, ob es Doppelungen gibt, etwa indem man guckt, ob das nächste Paar die gleiche Nummer wie der Vorgänger hat.</p>
<p>Das sind jetzt relative viele unnötige Stringoperationen, weil man bei den Paaren viele neue Strings erzeugt und durch die Gegend verschiebt. Wenn man dies optimieren möchte, kann man statt der Strings den Index der Subgruppe speichern (Also zum Beispiel statt {(&quot;[MOD]&quot;, 3), (&quot;[Weiss]&quot;, 4), (&quot;[UKE]&quot;, 1)} merkt man sich {(1, 3), (0, 4), (2, 1)}. Das ist dann eine Abstraktionsschicht mehr, dafür ist es effizienter. Musst du wissen, ob du dir das zutraust. Die naive Methode ist einfacher zu verstehen und einfacher bei eventueller Fehlersuche.</p>
<hr />
<p>Oder es gibt auch die vollständig andere Methode, dass man sich gar nix zwischenspeichert. Man weiß schließlich, in welcher Reihenfolge die Subgruppen später stehen müssen. Also könnte man einfach gucken, ob ein String aus Subgruppe 1 vorkommt, wenn ja, dann kommt er direkt ganz nach vorne. Falls Nein, dann tut man halt nix. Und falls mehrere vorkommen, dann direkt Fehler. Und dann fährt man immer so fort mit Subgruppe 2 und so weiter. Das ist denkbar simpel und direkt. Aber das fliegt einem um die Ohren, wenn es Doppeldeutigkeiten oder unbekannte Bestandteile gibt. Daher müssen diese ausgeschlossen sein, sonst ist diese Methode nix.</p>
<hr />
<p>Meine erste Methode ist robust, aber eventuell überkompliziert. Die simple Methode ist zum Angeben, wie gut man darin ist, die einfachste Abstraktion zu finden. Aber wenn dann eine leichte Änderung der Anforderung kommt, steht man dumm da. Im echten Leben würde ich die robuste Methode wählen, die simple Methode ist eher für den Informatikunterricht (Aber ich nehme an, das hier ist aus dem Informatikunterricht?).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2624885</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2624885</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 14 Apr 2026 14:59:52 GMT</pubDate></item></channel></rss>