<?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 in Wörter Trennen.]]></title><description><![CDATA[<p>Hi zusammen,</p>
<p>ich habe folgenden String:</p>
<p>:pazifi!~pazifi@42DD1679.FFF4F829.250A8642.IP PRIVMSG #test :!action test test</p>
<p>Ich wollte Fragen, ob es möglich ist, nach &quot;!action&quot; nur das erste &quot;test&quot; einzulesen, welches zwischen den zwei Leerzeichen liegt. Sind mehr Leerzeichen da sollen die nicht extra beachtet werden, so dass man das reine Wort rausgekommt.</p>
<p>Also ich möchte vorallem fragen, welche Funktionen sich dazu am besten eignen und nach welchem Prinzip man da am besten vorgeht.</p>
<p>Bisher probierte ich es mit:</p>
<pre><code class="language-cpp">size_t pos = 0;
if((pos=buffer.find(&quot;:!action&quot;))!=string::npos) {
string nick_in_aktion(buffer.substr(pos+6,pos+47));
}
</code></pre>
<p>Das Problem ist aber, dass ich da grundsätzlich alle x-zeichen zwischen Position 1 und 2 bekomme...</p>
<p>Grüsse pazifi</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/198518/string-in-wörter-trennen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 02 Oct 2026 14:52:13 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/198518.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 22 Nov 2007 11:35:27 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to String in Wörter Trennen. on Thu, 22 Nov 2007 11:35:27 GMT]]></title><description><![CDATA[<p>Hi zusammen,</p>
<p>ich habe folgenden String:</p>
<p>:pazifi!~pazifi@42DD1679.FFF4F829.250A8642.IP PRIVMSG #test :!action test test</p>
<p>Ich wollte Fragen, ob es möglich ist, nach &quot;!action&quot; nur das erste &quot;test&quot; einzulesen, welches zwischen den zwei Leerzeichen liegt. Sind mehr Leerzeichen da sollen die nicht extra beachtet werden, so dass man das reine Wort rausgekommt.</p>
<p>Also ich möchte vorallem fragen, welche Funktionen sich dazu am besten eignen und nach welchem Prinzip man da am besten vorgeht.</p>
<p>Bisher probierte ich es mit:</p>
<pre><code class="language-cpp">size_t pos = 0;
if((pos=buffer.find(&quot;:!action&quot;))!=string::npos) {
string nick_in_aktion(buffer.substr(pos+6,pos+47));
}
</code></pre>
<p>Das Problem ist aber, dass ich da grundsätzlich alle x-zeichen zwischen Position 1 und 2 bekomme...</p>
<p>Grüsse pazifi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1408062</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1408062</guid><dc:creator><![CDATA[pazifi]]></dc:creator><pubDate>Thu, 22 Nov 2007 11:35:27 GMT</pubDate></item><item><title><![CDATA[Reply to String in Wörter Trennen. on Thu, 22 Nov 2007 11:56:41 GMT]]></title><description><![CDATA[<p>Schritt 1: Finde das &quot;!action&quot; - hast du ja schon erledigt<br />
Schritt 2: Finde den Anfang des Wortes - find_first_not_of()<br />
Schritt 3: Finde das Ende des Wortes - find_first_of()<br />
Schritt 4: Schneide dir den Abschnitt zwischen beiden Positionen aus - substr()</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1408078</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1408078</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 22 Nov 2007 11:56:41 GMT</pubDate></item><item><title><![CDATA[Reply to String in Wörter Trennen. on Thu, 22 Nov 2007 15:38:25 GMT]]></title><description><![CDATA[<p>Vielen Dank für deine Hilfe.</p>
<p>Momentan probiere ich es nicht ganz erfolgreich so zu lösen:</p>
<pre><code class="language-cpp">size_t pos = 0;
size_t pos1 = 0;
size_t pos2 = 0;

if((pos=buffer.find(&quot;:!action&quot;))!=string::npos) {  //anfang !action finden
	string nick_in_aktion(buffer.substr(pos+6,pos+47)); //nach aktion ausschneiden
	pos1 = nick_in_aktion.find_first_not_of(&quot; &quot;); //prüfen bis erstes zeichen kommt
	string nick_in_aktion1(nick_in_aktion.substr(pos1,41-pos1)); //ab dort ausschneiden
	pos2 = nick_in_aktion1.find_first_of(&quot; &quot;);  // prüfen wann das leerzeichen an wortende kommt 
	string nick_in_aktion2(nick_in_aktion1.substr(0,pos2)); //wortabschnitt ausschneiden
}
</code></pre>
<p>Solange ein Wort vorhanden ist, geht das gut, aber sobald kein Wort da ist, stürzt das Programm ab...<br />
Der Compiler gibt kein Fehler beim Compilen aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1408256</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1408256</guid><dc:creator><![CDATA[pazifi]]></dc:creator><pubDate>Thu, 22 Nov 2007 15:38:25 GMT</pubDate></item><item><title><![CDATA[Reply to String in Wörter Trennen. on Thu, 22 Nov 2007 15:50:01 GMT]]></title><description><![CDATA[<p>Ja, bei den ganzen find...() Aufrufen solltest du auch abfangen, ob sie etwas gefunden haben (die geben grundsätzlich string::npos zurück, wenn nichts zu finden war).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1408271</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1408271</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 22 Nov 2007 15:50:01 GMT</pubDate></item><item><title><![CDATA[Reply to String in Wörter Trennen. on Thu, 22 Nov 2007 16:13:35 GMT]]></title><description><![CDATA[<p>Danke (o:</p>
<p>Jetzt gehts.</p>
<p>Ich musste die eine Zeile noch folgendermassen abfangen:</p>
<p>[cpp]<br />
nick_in_aktion=buffer.substr(pos+befehl.size(),pos+47);<br />
<strong>if((pos1 = nick_in_aktion.find_first_not_of(&quot; &quot;))!=string::npos) {</strong><br />
nick_in_aktion1=nick_in_aktion.substr(pos1,41-pos1);<br />
pos2 = nick_in_aktion1.find_first_of(&quot; &quot;);<br />
nick_in_aktion2=nick_in_aktion1.substr(0,pos2);<br />
} else {<br />
nick_in_aktion2=&quot;&quot;;<br />
}<br />
[/cpp]</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1408291</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1408291</guid><dc:creator><![CDATA[pazifi]]></dc:creator><pubDate>Thu, 22 Nov 2007 16:13:35 GMT</pubDate></item><item><title><![CDATA[Reply to String in Wörter Trennen. on Fri, 23 Nov 2007 07:23:40 GMT]]></title><description><![CDATA[<p>Noch eine kleine Ergänzung: Es ist unnötig, noch viele Substrings als Zwischenspeicher zu erzeugen:</p>
<pre><code class="language-cpp">if((pos=buffer.find(&quot;:!action&quot;))!=string::npos)
{
  pos1 = buffer.find_first_not_of(&quot; &quot;,pos+6);
  if(pos1!=string::npos)
  {
    pos2=buffer.find_first_of(&quot; &quot;,pos1);
    nick=buffer.substr(pos1,pos2-pos1);
  }
  else
    nick=&quot;&quot;;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1408586</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1408586</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 23 Nov 2007 07:23:40 GMT</pubDate></item><item><title><![CDATA[Reply to String in Wörter Trennen. on Sat, 24 Nov 2007 17:36:47 GMT]]></title><description><![CDATA[<p>Danke für den letzen Tipp, hat mir das ganze Prozedere was ich gegen Ende hatte echt verkürzt.</p>
<p>Die Funktion macht jetzt folgendes:</p>
<p>Bei '!action' nimmt die den Nick von dem welcher den Befehl ausführt, ohne etwaige Leerzeichen zu Beginn und Ende.</p>
<p>Bei '!action nick' wird &quot;nick&quot; genommen, stehen andere wörter/nicks nach einen Leerzeichen werden die übergangen.</p>
<p>Bei '!action &quot;nick und nick und bla&quot;' wird alles zwischen den Anführungszeichen genommen. Steht hinter dem zweiten Anführungszeichen was, wirds übergangen.<br />
Wird das abschliessende Anführungszeichen vergessen, wird nur bis zum ersten Leerzeichen ausgelesen.</p>
<pre><code class="language-cpp">void action(string befehl, string handlung, const string &amp;buffer) {
	size_t len = 0;
	size_t pos = 0;	
	size_t pos1 = 0;
	size_t pos2 = 0;
	string nick_name(&quot;&quot;);

	string ausgabe(&quot;&quot;);

	//position des befehls auslesen
	pos = buffer.find(befehl);
	//länge des befehls auslesen	
	len = befehl.length();

	//prüfen ob &quot; vorhanden	
	if((buffer.find(&quot;\&quot;&quot;)) != string::npos) {	
		//wenn &quot; vorhanden erstes &quot; finden +1 damit selbst nicht mitgezählt	
		pos1 = buffer.find_first_of(&quot;\&quot;&quot;)+1;				
		//prüfen ob mit &quot; abgeschlossen wurde		
		if((buffer.find(&quot;\&quot;&quot;,pos1)) != string::npos) {			
			//wenn ja ende bei &quot;		
			pos2 = buffer.find_first_of(&quot;\&quot;&quot;,pos1);
		} else {
			//wenn nein ende bei ersten leerzeichen nach &quot;
			pos2 = buffer.find_first_of(&quot; &quot;,pos1);
		}
	} else if (buffer.find_first_not_of(&quot; &quot;,pos+len) != string::npos) {
		//wenn kein &quot; vorhanden erste leerstelle nach befehl finden		
		pos1 = buffer.find_first_not_of(&quot; &quot;,pos+len);
		//zweite leerstelle nach befehl
		pos2 = buffer.find_first_of(&quot; &quot;,pos1);
	} else {
		//wenn kein nick nach befehl, nick vom schreiber nehmen		
		pos1=1;
		pos2=buffer.find(&quot;~&quot;)-1;
	}
	//nick auschneiden
	nick_name=buffer.substr(pos1,pos2-pos1);

[...]
}
</code></pre>
<p>Ich denke somit wäre die Frage vollständig gelöst. Danke nochmals!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1409473</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1409473</guid><dc:creator><![CDATA[pazifi]]></dc:creator><pubDate>Sat, 24 Nov 2007 17:36:47 GMT</pubDate></item></channel></rss>