<?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[Probleme bei Stringbearbeitung]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich brauche ein Funktion, die mir einen String formatiert. Der String ist in Blöcke von Zahlen unterteilt, die hier mit einem Doppelpunkt von einander getrennt sind.</p>
<p>Beispiel: 23:24:28:10:29:18:12:24:11:27:10:22:10:20:28</p>
<p>Nun muss ich diesen String von hinten lesen und jeweils die Zahlen der einzelnen Blöcke umdrehen. Hier sollte also rauskommen:</p>
<p>82:02:01:22....</p>
<p>Meine dazu geschriebene Methode kommt nur zu folgenden Fehlern, die anscheinend dann in einer Endlosschleife stecken bleiben:</p>
<p>*** Error in <code>./noob': free(): invalid next size (fast): 0x0000000001870770 *** \*\*\* Error in</code>./noob': malloc(): memory corruption: 0x00000000018707a0 ***</p>
<pre><code>void myclass::format_output(std::string&amp; raw_result) {

  std::stringstream output, tmp;
  bool delimiter_seen = true;
  std::cout &lt;&lt; &quot;\n\n&quot; &lt;&lt; raw_result &lt;&lt; &quot;\n\n&quot;;
  for(std::string::reverse_iterator rit = raw_result.rbegin(); rit != raw_result.rend(); ++rit)  { //rückwerts über String iterieren   
    if(*rit != delimiter) { //Delimiter == &quot;:&quot;
      tmp &lt;&lt; *rit;
    }
    else {
      if(delimiter_seen) {
	std::reverse(tmp.str().begin(), tmp.str().end());
	output &lt;&lt; tmp.str();
	tmp.str(&quot;&quot;);
	delimiter_seen = false;
      }
      else {
	delimiter_seen = true;
      }
    }
  }

  raw_result = output.str();
}
</code></pre>
<p>Vielen Dank<br />
LG, freakC++</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/317779/probleme-bei-stringbearbeitung</link><generator>RSS for Node</generator><lastBuildDate>Mon, 27 Jul 2026 22:52:28 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/317779.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 20 Jun 2013 14:02:45 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Probleme bei Stringbearbeitung on Thu, 20 Jun 2013 14:04:21 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich brauche ein Funktion, die mir einen String formatiert. Der String ist in Blöcke von Zahlen unterteilt, die hier mit einem Doppelpunkt von einander getrennt sind.</p>
<p>Beispiel: 23:24:28:10:29:18:12:24:11:27:10:22:10:20:28</p>
<p>Nun muss ich diesen String von hinten lesen und jeweils die Zahlen der einzelnen Blöcke umdrehen. Hier sollte also rauskommen:</p>
<p>82:02:01:22....</p>
<p>Meine dazu geschriebene Methode kommt nur zu folgenden Fehlern, die anscheinend dann in einer Endlosschleife stecken bleiben:</p>
<p>*** Error in <code>./noob': free(): invalid next size (fast): 0x0000000001870770 *** \*\*\* Error in</code>./noob': malloc(): memory corruption: 0x00000000018707a0 ***</p>
<pre><code>void myclass::format_output(std::string&amp; raw_result) {

  std::stringstream output, tmp;
  bool delimiter_seen = true;
  std::cout &lt;&lt; &quot;\n\n&quot; &lt;&lt; raw_result &lt;&lt; &quot;\n\n&quot;;
  for(std::string::reverse_iterator rit = raw_result.rbegin(); rit != raw_result.rend(); ++rit)  { //rückwerts über String iterieren   
    if(*rit != delimiter) { //Delimiter == &quot;:&quot;
      tmp &lt;&lt; *rit;
    }
    else {
      if(delimiter_seen) {
	std::reverse(tmp.str().begin(), tmp.str().end());
	output &lt;&lt; tmp.str();
	tmp.str(&quot;&quot;);
	delimiter_seen = false;
      }
      else {
	delimiter_seen = true;
      }
    }
  }

  raw_result = output.str();
}
</code></pre>
<p>Vielen Dank<br />
LG, freakC++</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2332809</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2332809</guid><dc:creator><![CDATA[freakC++]]></dc:creator><pubDate>Thu, 20 Jun 2013 14:04:21 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei Stringbearbeitung on Thu, 20 Jun 2013 14:05:43 GMT]]></title><description><![CDATA[<p>Reverse den ganzen String einfach.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2332810</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2332810</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Thu, 20 Jun 2013 14:05:43 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei Stringbearbeitung on Thu, 20 Jun 2013 14:14:09 GMT]]></title><description><![CDATA[<p>Ja, die Aufgabenstellung macht für mich nur wenig Sinn.<br />
std::reverse sollte reichen, aber selbst das ist nicht wirklich sinnvoll.</p>
<p>Wenn du jetzt noch an die (gerade umgedrehten) Daten kommen willst, um diese z.B. in einen vector zu schieben, dann kannst du folgendes machen (selbst das wäre wahrscheinlich noch eifnacher machbar):</p>
<pre><code>std::vector&lt;int&gt; parse(std::string str)
{
	std::reverse(str.begin(), str.end());
	std::replace(str.begin(), str.end(), ':', ' ');

	std::vector&lt;int&gt; result;
	std::back_insert_iterator&lt;std::vector&lt;int&gt;&gt; back_it(result);

	std::stringstream ss(str);

	std::copy(std::istream_iterator&lt;int&gt;(ss), std::istream_iterator&lt;int(), back_it);
}
</code></pre>
<p>ungetestet aus dem Kopf getippt... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2332815</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2332815</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Thu, 20 Jun 2013 14:14:09 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei Stringbearbeitung on Thu, 20 Jun 2013 14:32:58 GMT]]></title><description><![CDATA[<p>3x komplett durchiterieren, 2x komplett kopieren. Bloß damit man die STL verwenden <em>kann</em>. Ein bisschen mehr Mühe bitte - die Standardbibliothek ist nicht dazu da, Probleme besonders umständlich, zu lösen sondern möglichst einfach.</p>
<p>Hier kämen wir mit einer einzigen Iteration und 0 Kopien aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2332821</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2332821</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 20 Jun 2013 14:32:58 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei Stringbearbeitung on Thu, 20 Jun 2013 14:38:36 GMT]]></title><description><![CDATA[<p>Ja, aber dazu muss man mal kurz denken, und die Zeit hab ich grad nicht. <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/2332823</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2332823</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Thu, 20 Jun 2013 14:38:36 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei Stringbearbeitung on Thu, 20 Jun 2013 14:45:11 GMT]]></title><description><![CDATA[<p>Sorry Leute! Ich habe Blödsinn geredet. Aus</p>
<p>23:24:28:10:29:18:12:24:11:27:10:22:10:20:28</p>
<p>soll</p>
<p>28:20:10:22:...</p>
<p>werden. Daher kann nicht einfach ein reverse machen. Deswegen ist mein Code etwas komplizierter. Sieht jemand das Problem?</p>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2332826</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2332826</guid><dc:creator><![CDATA[freakC++]]></dc:creator><pubDate>Thu, 20 Jun 2013 14:45:11 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei Stringbearbeitung on Thu, 20 Jun 2013 14:47:50 GMT]]></title><description><![CDATA[<p>Wieso musst du dann von hinten lesen? Pack das Ding in einen Stringstream, parse alle Zahlen (Doppelpunkte ignorieren) und kehr die Reihenfolge der Zahlen um. 1000x einfacher als alles was hier im Thread vorkam.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2332828</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2332828</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 20 Jun 2013 14:47:50 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei Stringbearbeitung on Thu, 20 Jun 2013 14:52:37 GMT]]></title><description><![CDATA[<p>Ich glaube, ich verstehe dich nicht richtig. Ich mach mal vor, wie ich dich verstehe.</p>
<p>1.) 23:24:28:10:29:18:12:24:11:27:10:22:10:20:28</p>
<p>2.) 232428102918122411271022102028 //Doppelpunkte raus</p>
<p>3.) 82029122... //umdrehen.</p>
<p>Jetzt ist erstens verloren gegangen, wo die Doppelpunkte standen (die Zahlenblöcke können beliebig groß sein) und außerdem drehe ich so auch die Blöcke um.</p>
<p>Ziel ist es die Blockreihenfolge umzudrehen, nicht die Blöcke selbst.</p>
<p>Danke <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/2332829</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2332829</guid><dc:creator><![CDATA[freakC++]]></dc:creator><pubDate>Thu, 20 Jun 2013 14:52:37 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei Stringbearbeitung on Thu, 20 Jun 2013 15:47:18 GMT]]></title><description><![CDATA[<p>Nein, du verstehst mich nicht richtig. Ich habe doch absichtlich **ignor(e)**ieren gesagt, nicht rausmachen.</p>
<p>Hier ist übrigens eine ganz nette Lösung für dein ursprüngliches Problem, beziehungsweise eine Lösung im Stil von Skym0sh0 aber mit</p>
<p>Skym0sh0 schrieb:</p>
<blockquote>
<p>kurz denken</p>
</blockquote>
<p>Ist auf den ersten Blick unnötig umständlich, aber so ein Iterator-basierter Streambuf kam mir sehr nützlich vor und ich konnte im Netz keinen fertigen finden. Daher veröffentliche ich ihn hier mal. ist natürlich noch leicht ausbaufähig, zum Beispiel könnte man den Iteratortyp erkennen und gegebenenfalls noch die ganzen Funktionen zum Zurücksetzen oder Positionieren anbieten, je nach dem, was der Iterator so kann. Für dieses einfachste Beispiel reicht ein Inputiterator:</p>
<pre><code>#include &lt;streambuf&gt;
#include &lt;ios&gt;    

template &lt;typename Iterator&gt; class iterator_streambuf : public std::streambuf
{
public:
  iterator_streambuf(Iterator begin, Iterator end): current(begin), end(end) { }
protected:
  virtual int_type underflow()
  {
    if (current != end)
      return *current;
    else 
      return traits_type::eof();
  }
  virtual int_type uflow()  
  {
    if (current != end)
      return *current++;
    else 
      return traits_type::eof();
  }
private:
  iterator_streambuf( const iterator_streambuf&amp; );    
  iterator_streambuf&amp; operator=( const iterator_streambuf&amp; );

  Iterator current;
  Iterator end;
};

#include &lt;string&gt;    
#include &lt;iostream&gt;  
#include &lt;forward_list&gt; 

int main()
{
  {
    std::string foo = &quot;!nebeirhcseg streawkceur remmi nedrew netfahcstoB ehcsinataS&quot;;

    iterator_streambuf&lt;decltype(foo.rbegin())&gt; buf(foo.rbegin(), foo.rend());
    std::istream in(&amp;buf);

    for(std::string str; in &gt;&gt; str; std::cout &lt;&lt; str &lt;&lt; '\n');  
  }
  // edit: Oder etwas exotischer:
  {
    std::forward_list&lt;int&gt; foo = {52, 32, 56, 32, 49, 53, 32, 49, 54, 32, 50, 51, 32, 52, 50};
    iterator_streambuf&lt;decltype(foo.begin())&gt; buf(foo.begin(), foo.end());
    std::istream in(&amp;buf);

    for(int i; in &gt;&gt; i; std::cout &lt;&lt; i &lt;&lt; ' ');  
    std::cout &lt;&lt; '\n';
  }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2332833</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2332833</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 20 Jun 2013 15:47:18 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei Stringbearbeitung on Thu, 20 Jun 2013 15:23:19 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Ist auf den ersten Blick unnötig umständlich, aber so ein Iterator-basierter Streambuf kam mir sehr nützlich vor und ich konnte im Netz keinen fertigen finden.</p>
</blockquote>
<p>Wenn du schon im Himmel der Iteratoren bist, wieso möchtest du dann wieder zurück in die Höllen der Streams?</p>
<p>Rate mal, wie GCCs stdlibc++ den Input parst: Mit Stream-Iteratoren.</p>
<p>Das heisst in diesem Falle:</p>
<pre><code class="language-cpp">std::string s = &quot;23:24:28:10:29:18:12:24:11:27:10:22:10:20:28:&quot;;
for (auto curr=s.rbegin(),last=curr;(last=curr++,curr=std::find(curr,s.rend(),':'))!=s.rend();)
  std::copy(curr.base(), last.base(), std::ostreambuf_iterator&lt;char&gt;(std::cout));
std::cout &lt;&lt; '\n';
</code></pre>
<p>Und du? Dein Ansatz kann genau Wörter bis zu nächsten Whitespace einlesen. Punkt. Nicht mehr. Was wenn an &quot;:&quot; getrennt werden soll (wie die Aufgabe *wirklich* lautete)? Dann halt von operator&gt;&gt; zu getline wechseln. Was wenn an &quot;:&quot; oder &quot;;&quot; getrennt werden soll? Ups. Das artet zu Locale-Rumgepfriemle aus. Will niemand.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2332835</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2332835</guid><dc:creator><![CDATA[eSsThehelL]]></dc:creator><pubDate>Thu, 20 Jun 2013 15:23:19 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei Stringbearbeitung on Thu, 20 Jun 2013 15:27:33 GMT]]></title><description><![CDATA[<p>Äh, natürlich</p>
<pre><code class="language-cpp">for (auto curr=s.rbegin(),last=curr;last=curr++,curr=std::find(curr,s.rend(),':'),last!=s.rend();)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2332836</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2332836</guid><dc:creator><![CDATA[eSsThehelL]]></dc:creator><pubDate>Thu, 20 Jun 2013 15:27:33 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei Stringbearbeitung on Thu, 20 Jun 2013 15:36:53 GMT]]></title><description><![CDATA[<p>eSsThehelL schrieb:</p>
<blockquote>
<p>SeppJ schrieb:</p>
<blockquote>
<p>Ist auf den ersten Blick unnötig umständlich, aber so ein Iterator-basierter Streambuf kam mir sehr nützlich vor und ich konnte im Netz keinen fertigen finden.</p>
</blockquote>
<p>Wenn du schon im Himmel der Iteratoren bist, wieso möchtest du dann wieder zurück in die Höllen der Streams?</p>
<p>Rate mal, wie GCCs stdlibc++ den Input parst: Mit Stream-Iteratoren.</p>
</blockquote>
<p>Ich glaube, du hast nicht kapiert, was mein Code macht. Iterator-&gt;Stream, nicht Stream-&gt;Iterator.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2332843</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2332843</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 20 Jun 2013 15:36:53 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei Stringbearbeitung on Thu, 20 Jun 2013 15:41:05 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>eSsThehelL schrieb:</p>
<blockquote>
<p>SeppJ schrieb:</p>
<blockquote>
<p>Ist auf den ersten Blick unnötig umständlich, aber so ein Iterator-basierter Streambuf kam mir sehr nützlich vor und ich konnte im Netz keinen fertigen finden.</p>
</blockquote>
<p>Wenn du schon im Himmel der Iteratoren bist, wieso möchtest du dann wieder zurück in die Höllen der Streams?</p>
<p>Rate mal, wie GCCs stdlibc++ den Input parst: Mit Stream-Iteratoren.</p>
</blockquote>
<p>Ich glaube, du hast nicht kapiert, was mein Code macht. Iterator-&gt;Stream, nicht Stream-&gt;Iterator.</p>
</blockquote>
<p>Ich glaube, du hast nicht kapiert:<br />
Iterator: <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="👍"
    /><br />
Stream: <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_down"
      title=":-1:"
      alt="👎"
    /></p>
<p>Folglich<br />
Stream -&gt; Iterator <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="👍"
    /><br />
Iterator -&gt; Stream <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_down"
      title=":-1:"
      alt="👎"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2332845</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2332845</guid><dc:creator><![CDATA[eSsThehelL]]></dc:creator><pubDate>Thu, 20 Jun 2013 15:41:05 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei Stringbearbeitung on Thu, 20 Jun 2013 15:47:54 GMT]]></title><description><![CDATA[<p>Sicher. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>edit: Mach doch mal das zweite Beispiel aus meinem Code mit deiner Methode nach.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2332846</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2332846</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 20 Jun 2013 15:47:54 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei Stringbearbeitung on Thu, 20 Jun 2013 15:49:57 GMT]]></title><description><![CDATA[<p>Der Beweis meiner Behauptung sind die Umstände, die nötig sind, deinen Ansatz auf das richtige Problem anzupassen (an &quot;:&quot; splitten und den erhaltenen String zu reversen).</p>
<p>Und, dass dein Ansatz am verallgemeinerten Problem scheitert: &quot;12:34;56&quot; =&gt; &quot;56;34:12&quot; (also an &quot;:&quot; und &quot;;&quot; splitten und den Separator beibehalten).</p>
<p>Ich versuch mich solange an deinem exotischen Problem.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2332849</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2332849</guid><dc:creator><![CDATA[eSsThehelL]]></dc:creator><pubDate>Thu, 20 Jun 2013 15:49:57 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei Stringbearbeitung on Thu, 20 Jun 2013 16:02:48 GMT]]></title><description><![CDATA[<p>Häh? Wovon redest du überhaupt? Dem Iterator-&gt;Stream oder der schnellen Lösung für das vereinfachte Problem?</p>
<p>Egal, beide haben überhaupt kein Problem mit irgendwelchen Separatoren. Ich bin immer mehr überzeugt, dass du gar nicht kapierst, was der Code macht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2332854</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2332854</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 20 Jun 2013 16:02:48 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei Stringbearbeitung on Thu, 20 Jun 2013 16:06:25 GMT]]></title><description><![CDATA[<p>Dein &quot;exotisches&quot; Problem:</p>
<pre><code class="language-cpp">std::forward_list&lt;char&gt; s = {53, 32, 56, 32, 49, 53, 32, 49, 54, 32, 50, 51, 32, 52, 50}; 
bool last_was_digit = true;
for (char c : s)
  if (!std::isdigit(c))
    last_was_digit = false;
  else
    last_was_digit = std::cout &lt;&lt; (last_was_digit?&quot;&quot;:&quot; &quot;) &lt;&lt; c;
</code></pre>
<p>Löse du mal das Problem von freakC++ mit deiner Streamlösung: &quot;12:34:56&quot; soll werden zu &quot;56:34:12&quot;. Und das möglichst ohne (a) Integer-Overflows (b) alles zu kopieren bei der Eingabe &quot;allesohnedoppelpunkte&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2332857</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2332857</guid><dc:creator><![CDATA[eSsThehelL]]></dc:creator><pubDate>Thu, 20 Jun 2013 16:06:25 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei Stringbearbeitung on Thu, 20 Jun 2013 16:26:31 GMT]]></title><description><![CDATA[<p>??? Aufmerksam lesen: Meine Streamlösung ist für den Fall, dass 12:34:56 zu 65, 43, 21 werden soll. So wie vom TE ursprünglich verlangt und als Demonstration für Skym0sh0, wie es ohne drei Umwege und trotzdem universell gehen könnte. Damit ist das eine ganz wunderbare Lösung, die kaum einen Prozessortakt zu viel verschwendet, dabei aber universell auf viele Probleme angewandt werden kann.</p>
<p>Zu deiner Lösung meines exotischen Problems: Ähh, du hast es nicht gelöst. Es geht nicht darum, die Zeichen auszugeben. Ich will die Zahlen haben! Wir wollen damit rechnen.</p>
<p>Wenn du nun beginnst, num_get nachzuprogrammieren: Holzweg. Dann fang ich an, Fließkommazahlen hexadezimal in Scientificschreibweise mit Vorzeichen in die Liste zu packen und es soll immer noch funktionieren. Bitte eine universelle Lösung, die meiner ebenbürtig ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2332861</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2332861</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 20 Jun 2013 16:26:31 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei Stringbearbeitung on Thu, 20 Jun 2013 17:00:41 GMT]]></title><description><![CDATA[<blockquote>
<p>Ziel ist es die Blockreihenfolge umzudrehen, nicht die Blöcke selbst.</p>
</blockquote>
<p>Und wenn du nun 'Block' durch 'Woerter' ersetzt, erkennst du, dass das Internet viele bekannte Loesungen in vielen bekannten und unbekannten Sprachen bereithaelt. Denken muss man wirklich nicht. Oder der MAtrixstil: Nicht denken, wissen!</p>
<p>Ach, ich bin da eher faul: <a href="http://www.geeksforgeeks.org/reverse-words-in-a-given-string/" rel="nofollow">http://www.geeksforgeeks.org/reverse-words-in-a-given-string/</a></p>
<p>Einfach ' ' durch ':' ersetzen, <a href="http://ideone.com/Xc1Sz5" rel="nofollow">http://ideone.com/Xc1Sz5</a> . Mann muss zwei Mal drueberiterieren, ist aber inplace. Trivial parallelisierbar. Um Sonderfaelle zu beachten, brauche ich eine bessere Problembeschreibung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2332865</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2332865</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Thu, 20 Jun 2013 17:00:41 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei Stringbearbeitung on Thu, 20 Jun 2013 16:58:47 GMT]]></title><description><![CDATA[<p>Genau das wollte ich machen. Mein Algorithmus ist dem doch dann gar nicht so fern....</p>
<p>Danke!</p>
<p>LG, freakC++</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2332870</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2332870</guid><dc:creator><![CDATA[freakC++]]></dc:creator><pubDate>Thu, 20 Jun 2013 16:58:47 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei Stringbearbeitung on Thu, 20 Jun 2013 17:18:34 GMT]]></title><description><![CDATA[<blockquote>
<p>verallgemeinerten Problem</p>
</blockquote>
<p>Soll ich mal anfangen zu verallgemeinern?<br />
1.) Variabler Separator<br />
2.) Separator variabler Laenge<br />
3.) Separator escapen um als Teilwort betrachtet zu werden.<br />
4.) Escapezeichen escapen<br />
5.) Keine Strings sondern Streams mit verschiedenen Fehlerzustaenden<br />
6.) Keine Strings sonder Bitstreams deren Wortgroesse kein Vielfaches von 8 Bit sind<br />
7.) Muahahahaha <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 />
8.) Werner darf nicht mitmachen<br />
9.) Mehr Muahahahaha ... <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2332873</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2332873</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Thu, 20 Jun 2013 17:18:34 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei Stringbearbeitung on Thu, 20 Jun 2013 17:19:55 GMT]]></title><description><![CDATA[<p>Dank knivils Link habe ich meine Methode nun wie folgt umgebaut. So funktioniert der Minialgorithmus und ich meiner Ansicht auch recht performant.</p>
<p>Hat jemand was dagegen? <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>
<pre><code>void myclass::format_output(std::string&amp; raw_result) {

  std::string::iterator num_begin = raw_result.begin();

  for(std::string::iterator it = raw_result.begin(); it != raw_result.end(); ++it) {   
    if(*it == delimiter){
      	std::reverse(num_begin, it);
	num_begin = it+1;
    }
  }
  std::reverse(raw_result.begin(), raw_result.end());
  raw_result.erase(0,1);
}
</code></pre>
<p>Viele Grüße<br />
freakC++</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2332874</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2332874</guid><dc:creator><![CDATA[freakC++]]></dc:creator><pubDate>Thu, 20 Jun 2013 17:19:55 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei Stringbearbeitung on Thu, 20 Jun 2013 17:19:01 GMT]]></title><description><![CDATA[<blockquote>
<p>Hat jemand was dagegen?</p>
</blockquote>
<p>Warum sollte es eine Methode und nicht eher eine freie Funktion sein?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2332877</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2332877</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Thu, 20 Jun 2013 17:19:01 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei Stringbearbeitung on Thu, 20 Jun 2013 17:19:31 GMT]]></title><description><![CDATA[<p>weil ich die Funktion nur in meiner Klasse brauche. Das würde dem Prinzip der Kapselung wiedersprechen.</p>
<p>Später brauche ich die Klasse nur als Hilfsmittel. Diese Formatierungsfunktion ist privat und muss nicht nach außen sichtbar sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2332878</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2332878</guid><dc:creator><![CDATA[freakC++]]></dc:creator><pubDate>Thu, 20 Jun 2013 17:19:31 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei Stringbearbeitung on Thu, 20 Jun 2013 17:36:55 GMT]]></title><description><![CDATA[<p>Es gibt viel bessere Alternativen. Datenkapselung ist es auch nicht, da diese Methode keine Daten der Klasse benutzt. Es ist eine freie Funktion, guter C++ Stil respektiert das, indem sie als freie Funktion implementiert wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2332881</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2332881</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Thu, 20 Jun 2013 17:36:55 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei Stringbearbeitung on Thu, 20 Jun 2013 18:43:05 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>??? Aufmerksam lesen: Meine Streamlösung ist für den Fall, dass 12:34:56 zu 65, 43, 21 werden soll. So wie vom TE ursprünglich verlangt</p>
</blockquote>
<p>Ja, ursprünglich.</p>
<p>freakC++ schrieb:</p>
<blockquote>
<p>Sorry Leute! Ich habe Blödsinn geredet. Aus</p>
<p>23:24:28:10:29:18:12:24:11:27:10:22:10:20:28</p>
<p>soll</p>
<p>28:20:10:22:...</p>
<p>werden. Daher kann nicht einfach ein reverse machen. Deswegen ist mein Code etwas komplizierter. Sieht jemand das Problem?</p>
</blockquote>
<p>Sollte doch nur eine kleine Änderung in deinem Code sein sein, nicht?</p>
<blockquote>
<p>und als Demonstration für Skym0sh0, wie es ohne drei Umwege und trotzdem universell gehen könnte. Damit ist das eine ganz wunderbare Lösung, die <strong>kaum einen Prozessortakt zu viel verschwendet</strong>, dabei aber universell auf viele Probleme angewandt werden kann.</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /><br />
Ich habe mal deine Lösung mit</p>
<pre><code class="language-cpp">std::string foo = &quot;!nebeirhcseg streawkceur remmi nedrew netfahcstoB ehcsinataS&quot;;
  for (int i=0; i&lt;20; i++)
    foo = foo + foo;
</code></pre>
<p>getestet und ich erhalte:</p>
<pre><code>reverse string + streambuf:  3.30s user 0.16s system 99% cpu 3.467 total
seppjs reversed streambuf :  2.93s user 0.10s system 99% cpu 3.034 total
iterator + for-loo p      :  0.78s user 0.10s system 99% cpu 0.883 total
</code></pre>
<p>Oooh, wie unerwartet. istream hält einen eigenen buffer, ostream hält einen buffer und formatierter Input ist teuer.</p>
<pre><code class="language-cpp">std::ostreambuf_iterator&lt;char&gt; out(std::cout);
auto it=foo.rbegin(), end=foo.rend();
while (it != end) {
  while (std::isspace(*it) &amp;&amp; it != end)
    ++it;
  while (!std::isspace(*it) &amp;&amp; it != end)
    *out++ = *it++;
  *out++ = ' ';
}
</code></pre>
<p>Meine Aussage: IOstream-Parsen ist sehr langsam und für Nicht-Whitespace-getrennten-Standarddatentypen-Input enorm umständlich. (Bei langsamen Festplatten fällt das Parsen vielleicht weniger ins Gewicht, aber wenn der Input schon im RAM ist, ist stringstream der Tod)</p>
<p>Für Speed soll man auf Iteratoren wechseln (istreambuf_iterator im Fall von externen Streams, sonst halt was gegeben ist). Ist oft auch kürzer und einleuchtender. Wenn einem Whitespaces egal sind, ist der Stream nur hinderlich.</p>
<blockquote>
<p>Zu deiner Lösung meines exotischen Problems: Ähh, du hast es nicht gelöst. Es geht nicht darum, die Zeichen auszugeben. Ich will die Zahlen haben! Wir wollen damit rechnen.</p>
</blockquote>
<p>Das ist deine Interpretation fürs Problem. Klar ist eine Streamlösung einfacher, wenn wir Parsen wollen. Das war aber nie gefragt.</p>
<blockquote>
<p>Wenn du nun beginnst, num_get nachzuprogrammieren: Holzweg. Dann fang ich an, Fließkommazahlen hexadezimal in Scientificschreibweise mit Vorzeichen in die Liste zu packen und es soll immer noch funktionieren. Bitte eine universelle Lösung, die meiner ebenbürtig ist.</p>
</blockquote>
<p>Nimmstu std::stoi. Das Design der Iostreams ist so kaputt, dass ich num_get nur mit istreambuf_iterator&lt;char|wchar_t&gt; verwenden kann (d.h. ich brauche deinen Iter2Streambuf aufgrund von Iostream-Limitations).</p>
<p>Ich wiederhole: Wie würdest du die eigentliche (im Gegensatz zur ursprünglichen) Aufgabe von freakC++ lösen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2332891</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2332891</guid><dc:creator><![CDATA[eSsThehelL]]></dc:creator><pubDate>Thu, 20 Jun 2013 18:43:05 GMT</pubDate></item></channel></rss>