<?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[IP-Adressen artige Strings sortieren]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich habe hier dutzende Strings in einem Format, ähnlich einer IPv4-Adresse. Diese Strings muss sortieren. Bei IPv4-Adressen geht dies ja relativ einfach mit</p>
<pre><code># Pseudocode einer Compare-Methode!!!
# IP-Adresse1: AAA.BBB.CCC.DDD
# IP-Adresse2: EEE.FFF.GGG.HHH

x += AAA &lt;&lt; 24;
x += BBB &lt;&lt; 16;
x += CCC &lt;&lt; 8;
x += DDD;

y += EEE &lt;&lt; 24;
y += FFF &lt;&lt; 16;
y += GGG &lt;&lt; 8;
y += HHH;

return (x==y ? 0: x &lt; y ? -1 : 1);
</code></pre>
<p>Meine String sehen aber so aus:</p>
<p>XXXX.YYYYY.ZZZZZZZZ</p>
<p>mit</p>
<p>0 &lt;= X &lt;= 1023<br />
0 &lt;= Y &lt;= 16383<br />
0 &lt;= Z &lt;= 16777215</p>
<p>jetzt sollte 1.10.1000 natürlich NACH der 1.4.202345 kommen. <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="😉"
    /><br />
Ich bekomme das gerade nicht hin. Jemand eine Idee?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/326909/ip-adressen-artige-strings-sortieren</link><generator>RSS for Node</generator><lastBuildDate>Sat, 30 May 2026 10:03:35 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/326909.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 14 Jul 2014 10:45:23 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to IP-Adressen artige Strings sortieren on Mon, 14 Jul 2014 10:45:23 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich habe hier dutzende Strings in einem Format, ähnlich einer IPv4-Adresse. Diese Strings muss sortieren. Bei IPv4-Adressen geht dies ja relativ einfach mit</p>
<pre><code># Pseudocode einer Compare-Methode!!!
# IP-Adresse1: AAA.BBB.CCC.DDD
# IP-Adresse2: EEE.FFF.GGG.HHH

x += AAA &lt;&lt; 24;
x += BBB &lt;&lt; 16;
x += CCC &lt;&lt; 8;
x += DDD;

y += EEE &lt;&lt; 24;
y += FFF &lt;&lt; 16;
y += GGG &lt;&lt; 8;
y += HHH;

return (x==y ? 0: x &lt; y ? -1 : 1);
</code></pre>
<p>Meine String sehen aber so aus:</p>
<p>XXXX.YYYYY.ZZZZZZZZ</p>
<p>mit</p>
<p>0 &lt;= X &lt;= 1023<br />
0 &lt;= Y &lt;= 16383<br />
0 &lt;= Z &lt;= 16777215</p>
<p>jetzt sollte 1.10.1000 natürlich NACH der 1.4.202345 kommen. <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="😉"
    /><br />
Ich bekomme das gerade nicht hin. Jemand eine Idee?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2408478</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2408478</guid><dc:creator><![CDATA[shinji]]></dc:creator><pubDate>Mon, 14 Jul 2014 10:45:23 GMT</pubDate></item><item><title><![CDATA[Reply to IP-Adressen artige Strings sortieren on Mon, 14 Jul 2014 10:55:26 GMT]]></title><description><![CDATA[<p>Entweder du konvertierst die Ziffernfolgen in einen integralen Typen, oder du zählst zuerst die Anzahl der Ziffern, sortierst wenn ungleich und vergleichst nur im Falle der Gleichheit (der Anzahl) anhand der Ziffern selbst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2408482</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2408482</guid><dc:creator><![CDATA[Fytch]]></dc:creator><pubDate>Mon, 14 Jul 2014 10:55:26 GMT</pubDate></item><item><title><![CDATA[Reply to IP-Adressen artige Strings sortieren on Mon, 14 Jul 2014 10:59:43 GMT]]></title><description><![CDATA[<p>Wenn du den String immer mit 0 auf das Format XXXX.YYYYY.ZZZZZZZZ aufbläst, sollte auch ein Stringvergleich funktionieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2408485</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2408485</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Mon, 14 Jul 2014 10:59:43 GMT</pubDate></item><item><title><![CDATA[Reply to IP-Adressen artige Strings sortieren on Mon, 14 Jul 2014 11:02:03 GMT]]></title><description><![CDATA[<blockquote>
<p>Ich bekomme das gerade nicht hin. Jemand eine Idee?</p>
</blockquote>
<p>Wie hast du die Daten vorliegen? Hast du einen String, oder hast du einen Skalar...?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2408487</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2408487</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Mon, 14 Jul 2014 11:02:03 GMT</pubDate></item><item><title><![CDATA[Reply to IP-Adressen artige Strings sortieren on Mon, 14 Jul 2014 11:14:28 GMT]]></title><description><![CDATA[<p>evtl. ungefähr so?</p>
<pre><code class="language-cpp">int compare(string s1, string s2)
{
    auto len = min( s1.size(), s2.size() );
    auto mis = mismatch( s1.begin(), s1.begin() + len, s2.begin() );
    if ( mis.first == s1.end() &amp;&amp; mis.second = s2.end() )        // s1 == s2
        return 0;
    auto f1 = find( mis.first, s1.end(), '.' ) - mis.first;
    auto f2 = find( mis.second, s2.end(), '.' ) - mis.second;
    if ( f1 != f2 )                                              // s1 != s2 (field size)
        return f1 &lt; f2 ? -1 : 1;
    return *mis.first &lt; *mis.second ? -1 : 1;                    // s1 != s2 (value)
}
</code></pre>
<p>ungetestet. Kann man bestimmt noch eleganter formulieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2408492</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2408492</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Mon, 14 Jul 2014 11:14:28 GMT</pubDate></item><item><title><![CDATA[Reply to IP-Adressen artige Strings sortieren on Mon, 14 Jul 2014 14:01:16 GMT]]></title><description><![CDATA[<p>Hast Du dieses Format erfunden?</p>
<p>Warum arbeitest Du nicht mit einer Klasse, die die Komponenten einzeln vorhält?<br />
So ein string erscheint mir arg unhandlich.</p>
<p>Irgendwie so in der Art:</p>
<pre><code class="language-cpp">#include &lt;algorithm&gt;
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;tuple&gt;

#include &lt;cassert&gt;
#include &lt;cinttypes&gt;
#include &lt;cstdint&gt;

class addr{
  std::uint16_t m_x;
  std::uint16_t m_y;
  std::uint32_t m_z;
public:
  addr(uint x=0u, uint y=0u, uint z=0u) : m_x(x), m_y(y), m_z(z){
    assert(!(1023&lt;x));
    assert(!(16383&lt;y));
    assert(!(16777215&lt;z));
  }
  uint x() const { return m_x; }
  uint y() const { return m_y; }
  uint z() const { return m_z; }

  bool operator&lt;(const addr&amp; a) const {
    return std::tie(m_x,m_y,m_z)&lt;std::tie(a.m_x,a.m_y,a.m_z);
  }
};

std::string to_string(const addr&amp; a){
  static const auto N = sizeof(&quot;XXXX.YYYYY.ZZZZZZZZ&quot;);
  char str[N];
  std::snprintf(str, N, &quot;%&quot; PRIu16 &quot;.%&quot; PRIu16 &quot;.%&quot; PRIu32, a.x(), a.y(), a.z());
  return str;
}

std::ostream&amp; operator&lt;&lt;(std::ostream&amp; out, const addr&amp; a){
  return out &lt;&lt; to_string(a);
}

int main(){
  addr arr[]{{1,10,1000},{1,4,202345},{1,10,0}, {1023, 16383, 16777215}};
  std::sort(std::begin(arr), std::end(arr));
  for(const auto&amp; a : arr)
    std::cout &lt;&lt; a &lt;&lt; '\n';
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2408524</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2408524</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Mon, 14 Jul 2014 14:01:16 GMT</pubDate></item><item><title><![CDATA[Reply to IP-Adressen artige Strings sortieren on Mon, 14 Jul 2014 16:37:25 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9791">@shinji</a><br />
Strings dieser Art sortiert man, indem man sie in mehrere Teile aufsplittet, und dann die Teile einzeln vergleicht. In deinem Fall ist das trivial, du kannst einfach immer &quot;.&quot; als Trennzeichen verwenden.</p>
<p>Dann musst du die Strings beim Vergleichen nur noch &quot;rechtsbündig vergleichen&quot;. D.h. wenn die Strings unterschiedlich lang sind, dann gewinnt der längere, und wenn sie gleich lang sind, dann kannst du einfach ganz normal nen String-Vergleich machen.</p>
<p>Alternativ kannst du die einzelnen Teile auch mit führenden Nullen auf gleiche Länge bringen und dann wieder einen einzigen String daraus zusammensetzen. Und dann diese wieder zusammengesetzten Strings vergleichen. (Das entspricht quasi dem was manni66 vorgeschlagen hat.)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2408568</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2408568</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 14 Jul 2014 16:37:25 GMT</pubDate></item><item><title><![CDATA[Reply to IP-Adressen artige Strings sortieren on Mon, 14 Jul 2014 16:42:52 GMT]]></title><description><![CDATA[<p>@Furble Wurble<br />
Cool, diese #defines (PRIu16 etc.) kannte ich noch gar nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2408570</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2408570</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 14 Jul 2014 16:42:52 GMT</pubDate></item></channel></rss>