<?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[Zeichenkette unterteilen]]></title><description><![CDATA[<p>Hallo <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="🙂"
    /> ,<br />
Der folgende Code unterteilt eine gegebene Zeichenkette in mehrere Zeichenketten, die durch einen bestimmten &quot;Unterteiler&quot; in Anfänglicher gekennzeichnet sind, z.B. &quot;Hallo+dies+ist+ein+Test+&quot;. Anschließend werden sie in einem gegebenen Vektor gespeichert.</p>
<pre><code>void subdivideString(std::string string, std::vector&lt;std::string&gt;&amp; strings, std::string divider)
{
	auto it = string.find(divider);
	auto itr = 0;

	while (it != string.npos)
	{
		std::string substring = string.substr(itr, it - itr);
		strings.emplace_back(substring);

		itr = (it + 1);
		it = string.find(divider, itr);
	}
}
</code></pre>
<p>Ist der Code so akzeptabel oder gibt es eine bessere Möglichkeit dieses Ziel zu erreichen ?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/336933/zeichenkette-unterteilen</link><generator>RSS for Node</generator><lastBuildDate>Sat, 18 Apr 2026 15:14:11 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/336933.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 24 Feb 2016 22:05:17 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zeichenkette unterteilen on Wed, 24 Feb 2016 22:05:17 GMT]]></title><description><![CDATA[<p>Hallo <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="🙂"
    /> ,<br />
Der folgende Code unterteilt eine gegebene Zeichenkette in mehrere Zeichenketten, die durch einen bestimmten &quot;Unterteiler&quot; in Anfänglicher gekennzeichnet sind, z.B. &quot;Hallo+dies+ist+ein+Test+&quot;. Anschließend werden sie in einem gegebenen Vektor gespeichert.</p>
<pre><code>void subdivideString(std::string string, std::vector&lt;std::string&gt;&amp; strings, std::string divider)
{
	auto it = string.find(divider);
	auto itr = 0;

	while (it != string.npos)
	{
		std::string substring = string.substr(itr, it - itr);
		strings.emplace_back(substring);

		itr = (it + 1);
		it = string.find(divider, itr);
	}
}
</code></pre>
<p>Ist der Code so akzeptabel oder gibt es eine bessere Möglichkeit dieses Ziel zu erreichen ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2488543</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2488543</guid><dc:creator><![CDATA[xxXLukas97Xxx]]></dc:creator><pubDate>Wed, 24 Feb 2016 22:05:17 GMT</pubDate></item><item><title><![CDATA[Reply to Zeichenkette unterteilen on Wed, 24 Feb 2016 23:04:34 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;vector&gt;
#include &lt;string&gt;
#include &lt;sstream&gt;

std::vector&lt; std::string &gt; tokenize( std::string const &amp; src, char delim )
{
	std::vector&lt; std::string &gt; tokens;
	std::string token;
	std::stringstream ss{ src };

	while( std::getline( ss, token, delim ) )
		tokens.push_back( token );

	return tokens;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2488547</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2488547</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Wed, 24 Feb 2016 23:04:34 GMT</pubDate></item><item><title><![CDATA[Reply to Zeichenkette unterteilen on Wed, 24 Feb 2016 23:21:53 GMT]]></title><description><![CDATA[<p>Akzeptabel, aber was mir direkt auffällt sind zwei Dinge:<br />
1. Ist es Absicht, dass der letzte Token nicht Teil der Ausgabe ist, wenn der String nicht auf dem Trennwort endet?<br />
2. Der Code hat ein merkwürdiges Verhalten bei Trennworten mit mehreren Buchstaben. Der erste, und nur der erste, Buchstabe des Trennwortes wird aus dem nächsten Token entfernt. Ich denke, dies ist keine Absicht. Entweder soll doch wohl das Trennwort höchsten einen Buchstaben haben (also vom Typ char sein) oder aber der Code muss angepasst werden, um mit einer beliebigen Länge des Trennwortes klar zu kommen.</p>
<p>Von der technischen Seite her, würde ich mir den Umweg über die substring-Variable sparen. <em>Sollte</em> zwar wegoptimiert werden, aber der Code wäre auch nicht unleserlicher, würde man dies einfach weglassen.</p>
<p>Ich sähe es lieber, wenn man durch die Funktion nicht auf einen vector festgenagelt würde. Nimm besser einen beliebigen Iterator als Argument.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2488549</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2488549</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 24 Feb 2016 23:21:53 GMT</pubDate></item><item><title><![CDATA[Reply to Zeichenkette unterteilen on Thu, 25 Feb 2016 08:21:23 GMT]]></title><description><![CDATA[<p>was SeppJ mit 'beliebigen Iterator' meint, ist IMHO wohl sowas:</p>
<pre><code>#include &lt;set&gt;
#include &lt;string&gt;
#include &lt;sstream&gt;
#include &lt;iterator&gt; // inserter, back_inserter
#include &lt;iostream&gt;

template&lt; typename Out &gt;
void tokenize( std::string const&amp; src, char delim, Out out )
{
    std::istringstream ss{ src };   // (i)stringstream reicht, mehr braucht es nicht
    for( std::string token; std::getline( ss, token, delim ); )
        *out++ = token;
}

int main()
{
    using namespace std;
    set&lt; string &gt; tokens;    // Der Aufrufer entscheidet über den Typ des Containers
    tokenize( &quot;Hallo+dies+ist+ein+Test&quot;, '+', inserter( tokens, begin(tokens) ) );

    for( auto&amp; tok: tokens )
        cout &lt;&lt; tok &lt;&lt; endl;
    return 0;
}
</code></pre>
<p>.. wobei sich bei diesen Dingen jedesmal die Frage stellt:<br />
Wo kommt der Text ursprünglich her? Stand er womöglich in einer Datei?</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2488565</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2488565</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Thu, 25 Feb 2016 08:21:23 GMT</pubDate></item><item><title><![CDATA[Reply to Zeichenkette unterteilen on Thu, 25 Feb 2016 09:18:25 GMT]]></title><description><![CDATA[<p>Vielen Dank für die schnellen Antworten <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="🙂"
    /> .<br />
Das Wort &quot;delimiter&quot; hör ich zum ersten Mal. Auch der der insert_iterator ist mir neu ! Scheint, dass ich noch einiges zu lernen habe <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>
<p>Lg,<br />
Lukas <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2488567</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2488567</guid><dc:creator><![CDATA[xxXLukas97Xxx]]></dc:creator><pubDate>Thu, 25 Feb 2016 09:18:25 GMT</pubDate></item><item><title><![CDATA[Reply to Zeichenkette unterteilen on Thu, 25 Feb 2016 10:04:30 GMT]]></title><description><![CDATA[<p>Werner Salomon schrieb:</p>
<blockquote>
<pre><code class="language-cpp">// ...
 
template&lt; typename Out &gt;
void tokenize( std::string const&amp; src, char delim, Out out )
{
    std::istringstream ss{ src };   // (i)stringstream reicht, mehr braucht es nicht
    for( std::string token; std::getline( ss, token, delim ); )
        *out++ = token;
}

// ...
</code></pre>
</blockquote>
<p>. o O ( Wie langs wohl noch dauert bis ich auf Anhieb auf die wirklich, wirklich eleganten Lösungen komm? )</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2488569</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2488569</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Thu, 25 Feb 2016 10:04:30 GMT</pubDate></item><item><title><![CDATA[Reply to Zeichenkette unterteilen on Thu, 25 Feb 2016 12:03:39 GMT]]></title><description><![CDATA[<p>Swordfish schrieb:</p>
<blockquote>
<p>. o O ( Wie langs wohl noch dauert bis ich auf Anhieb auf die wirklich, wirklich eleganten Lösungen komm? )</p>
</blockquote>
<p>Ich finde seine Lösung nicht besonders hübsch.</p>
<p>Schließlich möchte eine gute Bibliothek so abstrakt wie möglich operieren. Folgendes wäre also mein Vorschlag:</p>
<pre><code>#include &lt;experimental/string_view&gt;

#include &lt;iterator&gt;   // traits
#include &lt;utility&gt;    // pair
#include &lt;functional&gt; // equal_to

namespace ste = std::experimental;

namespace detail {
	template &lt;typename ForwardIt, typename Func, typename Delim, typename Comp&gt;
	void foreachSplit(ForwardIt first, ForwardIt last, Func f, Delim delim, Comp comp) {
		using traits = std::iterator_traits&lt;ForwardIt&gt;;
		auto it = first;
		while (first != last) {
			if (comp(*first, delim)) {
				if (it != first)
					f(it, first);
				it = ++first;
			}
			else ++first;
		}
		if (it != last)
			f(it, last);
	}
}

template &lt;typename ForwardIt, typename OutputIterator, typename Delim, typename Comp&gt;
void split(ForwardIt first, ForwardIt last, OutputIterator out, Delim delim, Comp comp) {
	detail::foreachSplit(first, last, [&amp;] (auto... its) {*out++ = std::make_pair(its...);}, delim, comp);}
template &lt;typename ForwardIt, typename OutputIterator, typename Delim&gt;
void split(ForwardIt first, ForwardIt last, OutputIterator out, Delim delim) {
	split(first, last, out, delim, std::equal_to&lt;&gt;{});}

template &lt;typename CharT, typename OutputIterator, typename Traits&gt;
void splitString(CharT const* first, CharT const* last, OutputIterator out, CharT delim, Traits) {
	auto fun = [&amp;] (auto l, auto r) {*out++ = ste::basic_string_view&lt;CharT, Traits&gt;(l, r-l);};
	detail::foreachSplit(first, last, fun, delim, Traits::eq);
}
template &lt;typename CharT, typename OutputIterator&gt;
void splitString(CharT const* first, CharT const* last, OutputIterator out, CharT delim) {
	splitString(first, last, out, delim, std::char_traits&lt;CharT&gt;{});}

#include &lt;iostream&gt;
#include &lt;vector&gt;

int main() {
	{
		int arr[] {1, 2, 3, 4, 3, 5, 9, 4, 1, 2, 4};
		std::vector&lt;std::pair&lt;int*, int*&gt;&gt; vec;
		split(std::begin(arr), std::end(arr), std::back_inserter(vec), 4);
		for (auto&amp; p : vec) {
			for (auto i = p.first; i != p.second; ++i)
				std::cout &lt;&lt; *i &lt;&lt; ' ';
			std::cout &lt;&lt; '\n';
		}
	}
	{
		char const str[] = &quot;Hallo+dies+ist+ein+Test&quot;;
		std::vector&lt;ste::basic_string_view&lt;char&gt;&gt; vec;
		splitString(std::begin(str), std::end(str)-1, std::back_inserter(vec), '+');
		for (auto&amp; p : vec)
			std::cout &lt;&lt; p &lt;&lt; '\n';
	}
}
</code></pre>
<p><a href="http://coliru.stacked-crooked.com/a/a8a3f784932adfb6" rel="nofollow">Demo</a>.</p>
<p>Allerdings ist das performance-mäßig nicht optimal. Wenn wir den nächsten Delimiter im Falle eines byte-großen, trivial vergleichbaren Objektes finden möchten, können wir einen kleinen Trick anwenden (welcher sich auf <code>__int128</code> ausweiten lässt):</p>
<pre><code>bool has_zero_byte(std::uint64_t v) {
	return (v - 0x0101010101010101ull) &amp; ~v &amp; 0x8080808080808080ull;}

bool has_byte(std::uint64_t x, unsigned char n) {
	return has_zero_byte(x ^ (~0ull/255 * n));}

/* Requires: - p is properly aligned for an object of type uint64_t,
             - p points to byte k of an object of size at least, k+sizeof(uint64_t), and 
             - the sizeof(uint64_t) bytes starting at k contain a valid value representation for uint64_t. */
std::uint64_t qword_from( char const* p ) {
	return *std::launder(reinterpret_cast&lt;std::uint64_t*&gt;(p));
}

char const* find_next(char const* s, std::size_t len, char c) {
    void* p = s;
    std::size_t space = len;
    if (auto p = std::align(alignof(std::uint64_t), len, &amp;p, space))
         // ...
}
</code></pre>
<p>Ist IIRC nicht in Implementierungen gängig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2488573</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2488573</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Thu, 25 Feb 2016 12:03:39 GMT</pubDate></item><item><title><![CDATA[Reply to Zeichenkette unterteilen on Thu, 25 Feb 2016 12:02:14 GMT]]></title><description><![CDATA[<pre><code>boost::split(vector&lt;string&gt;, str, boost::is_any_of(&quot; &quot;));
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2488574</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2488574</guid><dc:creator><![CDATA[Kenner des boost]]></dc:creator><pubDate>Thu, 25 Feb 2016 12:02:14 GMT</pubDate></item><item><title><![CDATA[Reply to Zeichenkette unterteilen on Thu, 25 Feb 2016 12:16:43 GMT]]></title><description><![CDATA[<p>@Arcoth<br />
Delim delim, Comp comp<br />
=&gt;<br />
Pred pred<br />
?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2488575</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2488575</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 25 Feb 2016 12:16:43 GMT</pubDate></item><item><title><![CDATA[Reply to Zeichenkette unterteilen on Thu, 25 Feb 2016 12:27:05 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>@Arcoth<br />
Delim delim, Comp comp<br />
=&gt;<br />
Pred pred<br />
?</p>
</blockquote>
<p>Die von mir aufgezeigte (ziemlich effektive) Optimierung kann so nicht durchgeführt werden, da das Prädikat bei trivialem Vergleich irgendein Lambda sein wird. Die Idee ist ja, dass wir die Signatur so allgemein halten wie möglich, ohne Effizienz für die beliebtesten Anwendungsfälle einzubüßen: Wenn <code>Comp</code> eine Spezialisierung von <code>equal_to</code> ist, und der Iterator ein <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4284" rel="nofollow">Contiguous Iterator</a> auf entsprechende Type, können wir die spezielle Implementierung anschmeißen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2488577</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2488577</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Thu, 25 Feb 2016 12:27:05 GMT</pubDate></item><item><title><![CDATA[Reply to Zeichenkette unterteilen on Fri, 26 Feb 2016 02:00:28 GMT]]></title><description><![CDATA[<p>Ah OK <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f4a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--light_bulb"
      title=":bulb:"
      alt="💡"
    /><br />
Die Optimierung hab' ich beim Überfliegen gesehen, aber nicht genauer angeguckt <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>
<p>Und... was genau macht <code>std::launder</code> ?<br />
Was ich meine mir dazu korrekt ergoogelt zu haben: Man kann damit Strict Aliasing aushebeln. Also memcpy() nen POD irgendwo hin und dann Zugriff über <code>std::launder</code> und kein Problem mehr mit Strict Aliasing.<br />
Was mir aber nicht klar ist, ist ob es danach noch OK ist den selben Speicherbereich mit einem anderen Typ anzusprechen.</p>
<p>In deinem Beispiel vermutlich wurscht, da der andere Typ <code>char</code> ist, und für <code>char</code> gilt ja Strict Aliasing sowieso nicht. Aber was wenn man das selbe für <code>wchar_t</code> oder <code>char16_t</code> machen möchte?</p>
<p>p.S.: Ich hab' mich schon gefragt ob ich der einzige bin der es beknackt findet dass es keine Strict Aliasing Umfahrungsstrasse in C++ gibt. Wobei ich dabei eher an spezielle Hilfsfunktionen wie dein <code>qword_from</code> gedacht hätte -- bloss halt als Template.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2488665</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2488665</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 26 Feb 2016 02:00:28 GMT</pubDate></item><item><title><![CDATA[Reply to Zeichenkette unterteilen on Sun, 28 Feb 2016 23:17:25 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Und... was genau macht <code>std::launder</code> ?</p>
</blockquote>
<p><a href="http://wg21.link/p0137" rel="nofollow">P0137</a> formalisiert den Begriff des Zeigens, nach welchem ein (gecasteter) Zeiger auf ein altes Objekt nicht verwendet werden darf, um auf ein neues Objekt neuen Typs zuzugreifen, das in der selben memory location residiert. Der Grund für diese Regelung liegt in einer Optimierung: Der Wert eines Zeigers kann zurückverfolgt werden, um ggf. zu folden. Der Optimizer wird versuchen, zu beweisen, dass der Wert des Pointees zwischenzeitlich nicht modifiziert wurde. Das kann nur durch bestimmte glvalues geschehen; im folgenden Beispiel ist das nicht der Fall:</p>
<pre><code>int i = 0;
int* p = &amp;i;
float* fp = (float*)p;

new (fp) float(1); // fp darf i nicht aliasen, daher ist dies keine vom Optimizer registrierte Modifizierung

int j = *p; // UB
float f = *fp; // UB! f == 0 ist möglich
</code></pre>
<p>Nun scheint es, dass ich <code>launder</code> leider missverstanden habe - meine Anwendung ist nämlich völliger Unsinn: <a href="http://www.open-std.org/pipermail/ub/2016-February/000565.html" rel="nofollow">http://www.open-std.org/pipermail/ub/2016-February/000565.html</a></p>
<p>Die korrekte Variante meiner Funktion ist der momentan undefinierte Einsatz von <code>memcpy</code> , der bald definiert wird:</p>
<pre><code>std::uint64_t qword_from( char const* p ) {
    std::uint64_t u;
    std::memcpy(&amp;u, p, sizeof u);
    return u;
}
</code></pre>
<p>(Generiert übrigens tatsächlich auch nur einen <code>movq</code> ! Und führt in diesem Fall gar zu effizienterem Code, da es das Ausrichten überflüssig macht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f4a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--light_bulb"
      title=":bulb:"
      alt="💡"
    /> )</p>
<p>Jacksonville ist gerade am Laufen (hat heute begonnen). Dos Reis wird dort am Dienstag eine verfeinerte Variante seines Papers <a href="https://www.google.co.uk/search?q=dos+reis+lifetime&amp;oq=dos+reis+lifetime&amp;aqs=chrome..69i57j69i60l4j69i59.1356j0j7&amp;sourceid=chrome&amp;es_sm=93&amp;ie=UTF-8" rel="nofollow">N3751</a> vorstellen, welches die <code>memcpy</code> Regeln in [basic.types]/2 und /3 auf unterschiedliche Typen ausweitet. Das ist ein ziemlich wichtiger Schritt in die richtige Richtung.</p>
<blockquote>
<p>Was mir aber nicht klar ist, ist ob es danach noch OK ist den selben Speicherbereich mit einem anderen Typ anzusprechen.</p>
</blockquote>
<p>Einen Speicherbereich mit einem vom aktuellen Objekt abweichenden Typen anzusprechen ist generell Blödsinn; siehe der verlinkte Thread. Es geht, bis auf wenige Ausnahmen (wie e.g. structs mit common initial sequences und die bekannten Alias ausnahmen), nicht gut, da TBAA da grundsätzlich Schwierigkeiten bereitet (und gleichzeitig unverzichtbar ist).</p>
<blockquote>
<p>p.S.: Ich hab' mich schon gefragt ob ich der einzige bin der es beknackt findet dass es keine Strict Aliasing Umfahrungsstrasse in C++ gibt. Wobei ich dabei eher an spezielle Hilfsfunktionen wie dein <code>qword_from</code> gedacht hätte -- bloss halt als Template.</p>
</blockquote>
<p>Nein, ganz und gar nicht. Obiges kann man aber in ein Funktionstemplate auslagern. Womöglich kann da was standardisiert werden, ich schau nach Jacksonville nach.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2488945</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2488945</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Sun, 28 Feb 2016 23:17:25 GMT</pubDate></item><item><title><![CDATA[Reply to Zeichenkette unterteilen on Mon, 29 Feb 2016 17:09:27 GMT]]></title><description><![CDATA[<p>Ach ja, und es sollte noch erwähnt werden, dass obiger Trick wahrscheinlich schon in ähnlicher Form in <code>strchr</code> eingebaut ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2488997</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2488997</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Mon, 29 Feb 2016 17:09:27 GMT</pubDate></item></channel></rss>