<?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[string find (Vielleicht falsches Forum)]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich weiß noch nicht ganz sicher, ob das hier das richtige Forum ist... sorry, wenn nicht!</p>
<p>Ich habe einen string, der so aussieht:</p>
<p>TextCarriagereturnTextCarriageReturnCarriageReturnText etc...</p>
<p>Ich möchte jetzt gerne jede jeden &quot;Text&quot; durch die void TuWasDamit jagen.<br />
Ich bekomme es irgendwie nicht hin, die Zeile richtig zu splitten.</p>
<p>Kann mir bitte jemand sagen, was ich hier falsch mache?<br />
Vielen Dank!</p>
<pre><code class="language-cpp">void DoSomething(string data)
{
	int b = 0;
	int iPos = data.find(&quot;\r&quot;);
	string s = &quot;&quot;;

	for(;;)
	{
		if (iPos == -1)
		{
			break;
		}
		s = data.substr(b,iPos-b);
		TuWasDamit(s);
		b = iPos+1;
		iPos = data.find(&quot;\r&quot;,iPos-b);
	}
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/302650/string-find-vielleicht-falsches-forum</link><generator>RSS for Node</generator><lastBuildDate>Tue, 11 Aug 2026 06:50:05 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/302650.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 23 Apr 2012 17:26:13 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to string find (Vielleicht falsches Forum) on Mon, 23 Apr 2012 17:26:13 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich weiß noch nicht ganz sicher, ob das hier das richtige Forum ist... sorry, wenn nicht!</p>
<p>Ich habe einen string, der so aussieht:</p>
<p>TextCarriagereturnTextCarriageReturnCarriageReturnText etc...</p>
<p>Ich möchte jetzt gerne jede jeden &quot;Text&quot; durch die void TuWasDamit jagen.<br />
Ich bekomme es irgendwie nicht hin, die Zeile richtig zu splitten.</p>
<p>Kann mir bitte jemand sagen, was ich hier falsch mache?<br />
Vielen Dank!</p>
<pre><code class="language-cpp">void DoSomething(string data)
{
	int b = 0;
	int iPos = data.find(&quot;\r&quot;);
	string s = &quot;&quot;;

	for(;;)
	{
		if (iPos == -1)
		{
			break;
		}
		s = data.substr(b,iPos-b);
		TuWasDamit(s);
		b = iPos+1;
		iPos = data.find(&quot;\r&quot;,iPos-b);
	}
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2205000</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2205000</guid><dc:creator><![CDATA[hermieweber]]></dc:creator><pubDate>Mon, 23 Apr 2012 17:26:13 GMT</pubDate></item><item><title><![CDATA[Reply to string find (Vielleicht falsches Forum) on Mon, 23 Apr 2012 17:27:28 GMT]]></title><description><![CDATA[<p>ps: Ich freue mich auch, wenn mir jemand sagt, wie man es (abgesehen von meinem wohl offensichtlichen Fehler) besser macht.<br />
Dass ich Anfänger bin, ist wohl relativ offensichtlich.</p>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2205001</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2205001</guid><dc:creator><![CDATA[hermieweber]]></dc:creator><pubDate>Mon, 23 Apr 2012 17:27:28 GMT</pubDate></item><item><title><![CDATA[Reply to string find (Vielleicht falsches Forum) on Mon, 23 Apr 2012 17:32:35 GMT]]></title><description><![CDATA[<p>Woher bekommst du denn deine Daten? Möglicherweise aus einer Datei?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2205004</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2205004</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Mon, 23 Apr 2012 17:32:35 GMT</pubDate></item><item><title><![CDATA[Reply to string find (Vielleicht falsches Forum) on Mon, 23 Apr 2012 17:44:47 GMT]]></title><description><![CDATA[<p>Ja. Das klappt auch gut.<br />
Aber mit dem iPos und dem b stimmt was nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2205012</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2205012</guid><dc:creator><![CDATA[hermieweber]]></dc:creator><pubDate>Mon, 23 Apr 2012 17:44:47 GMT</pubDate></item><item><title><![CDATA[Reply to string find (Vielleicht falsches Forum) on Mon, 23 Apr 2012 17:49:22 GMT]]></title><description><![CDATA[<p>Deine Zeile 16 scheint ein bisschen durcheinander zu sein. Möchtest du da nicht von Position b an suchen?</p>
<p>Ich habe jetzt nicht nach weiteren Fehlern gesucht, habe stattdessen deine Idee (die an sich schon ganz gut ist) nochmal sauber umgesetzt:</p>
<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;iostream&gt;

using namespace std;

void TuWasDamit(string data)
{
  cout &lt;&lt; data &lt;&lt; '\n';
}

void DoSomething(string data)
{
  size_t prev = 0;  // Position des Zeichens nach dem letzten '\r'

  // next: Position des nächsten '\r'
  for(size_t next = data.find('\r', prev); next != string::npos; next = data.find('\r', prev))
    {
      TuWasDamit(data.substr(prev, next-prev));
      prev = next + 1;
    }

  if (prev &lt; data.size()) // Falls der String nicht auf '\r' endete.
    TuWasDamit(data.substr(prev));
} 

int main()
{
  DoSomething(&quot;Hallo\rWelt\r!\rDu\rbist\rso\rgrausam\r\rPlenk\r\r.&quot;);
}
</code></pre>
<p>Ist das gleiche wie deines, etwas weniger chaotisch und weniger unnötige Zwischenwerte. Und einen Sonderfall, den du vergessen hast noch eingefügt.</p>
<p>Das sollte sich auch leicht auf eine beliebige Liste von Delimitern verallgemeinern lassen, indem man find_first_of anstatt find nimmt. Und anstatt TuWasDamit aufzurufen, kann man natürlich ein allgemeines Funktionsobjekt aufrufen oder den Token in einen Outputiterator schreiben. Aber das ist eher fortgeschrittener Stoff.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2205013</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2205013</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 23 Apr 2012 17:49:22 GMT</pubDate></item><item><title><![CDATA[Reply to string find (Vielleicht falsches Forum) on Tue, 24 Apr 2012 08:15:28 GMT]]></title><description><![CDATA[<p>hermieweber schrieb:</p>
<blockquote>
<p>Ja. Das klappt auch gut.<br />
Aber mit dem iPos und dem b stimmt was nicht.</p>
</blockquote>
<p>Dann könntest du es auch so machen:</p>
<pre><code class="language-cpp">void DoSomething(std::istream&amp; data)
{
   std::string text;
   while(std::getline(data, text, '\r'))
      TuWasDamit(text);
}

int main()
{
   std::ifstream daten(&quot;Daten.txt&quot;);
   DoSomething(daten);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2205144</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2205144</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Tue, 24 Apr 2012 08:15:28 GMT</pubDate></item></channel></rss>