<?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[Problem: Suchen in Strings]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe ein Problem beim Durchsuchen eines Strings:</p>
<p>Eine Datei wird zeilenweise eingelesen, sie ist immer nach dem folgenden Schema aufgebaut:</p>
<p>KEY | value | comment</p>
<p>Ich möchte sowohl den Key, als auch den Value und den Comment herauslesen. Theoretisch ist es auch kein Problem und funktioniert soweit.<br />
Nun sind diese Dateien allerdings nicht immer vollkommen gleich, d.h. manchmal stehen mehr Leerzeichen oder ein Tabstopp, manchmal steht gar kein Leerzeichen dazwischen und manchmal besteht der value selbst aus mehreren Wörtern mit Leerzeichen getrennt.</p>
<pre><code>Beispiele:
KEY |value    |comment
KEY | value| comment
KEY |value|comment
KEY |value value| comment
usw...
</code></pre>
<p>Der Beginn des Value ist einfach. Ich suche nach dem 1. &quot;|&quot; und dann nach dem 1. Zeichen, das kein Leerzeichen ist (find_first_not_of(' ')).<br />
Aber gibt es auch eine Möglichkeit, von dem 2. &quot;|&quot; rückwärts nach dem 1. Zeichen zu suchen, das kein Leerzeichen ist?</p>
<p>Ich habe schon diverse Möglichkeiten ausprobiert, aber ich habe es noch nicht geschafft, dass es dann wirklich für alle vorkommenden Fälle funktioniert...</p>
<p>Wie würdet Ihr denn da vorgehen?<br />
Vielen Dank schon mal!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/221831/problem-suchen-in-strings</link><generator>RSS for Node</generator><lastBuildDate>Mon, 05 Oct 2026 19:37:02 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/221831.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 04 Sep 2008 05:44:09 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem: Suchen in Strings on Thu, 04 Sep 2008 05:44:09 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe ein Problem beim Durchsuchen eines Strings:</p>
<p>Eine Datei wird zeilenweise eingelesen, sie ist immer nach dem folgenden Schema aufgebaut:</p>
<p>KEY | value | comment</p>
<p>Ich möchte sowohl den Key, als auch den Value und den Comment herauslesen. Theoretisch ist es auch kein Problem und funktioniert soweit.<br />
Nun sind diese Dateien allerdings nicht immer vollkommen gleich, d.h. manchmal stehen mehr Leerzeichen oder ein Tabstopp, manchmal steht gar kein Leerzeichen dazwischen und manchmal besteht der value selbst aus mehreren Wörtern mit Leerzeichen getrennt.</p>
<pre><code>Beispiele:
KEY |value    |comment
KEY | value| comment
KEY |value|comment
KEY |value value| comment
usw...
</code></pre>
<p>Der Beginn des Value ist einfach. Ich suche nach dem 1. &quot;|&quot; und dann nach dem 1. Zeichen, das kein Leerzeichen ist (find_first_not_of(' ')).<br />
Aber gibt es auch eine Möglichkeit, von dem 2. &quot;|&quot; rückwärts nach dem 1. Zeichen zu suchen, das kein Leerzeichen ist?</p>
<p>Ich habe schon diverse Möglichkeiten ausprobiert, aber ich habe es noch nicht geschafft, dass es dann wirklich für alle vorkommenden Fälle funktioniert...</p>
<p>Wie würdet Ihr denn da vorgehen?<br />
Vielen Dank schon mal!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576224</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576224</guid><dc:creator><![CDATA[LadyM]]></dc:creator><pubDate>Thu, 04 Sep 2008 05:44:09 GMT</pubDate></item><item><title><![CDATA[Reply to Problem: Suchen in Strings on Thu, 04 Sep 2008 06:46:45 GMT]]></title><description><![CDATA[<p>Zerlege deinen String doch erstmal in Teilstrings mit Leerzeichen und lösche diese dann erst nachträglich raus. Das ist wahrscheinlich einfacher und sinnvoller, als in dem gesamten String hin und her zu navigieren. Zu dem Zweck kannst du dir ja eine kleine trim-Funktion aus find_first_not_of, erase usw. basteln, die am Anfang und am Ende abschneidet.</p>
<p>EDIT:</p>
<p>Ich benutze zwar so gut wie nie std::string (entweder CString oder char*), habe aber mal ein bisschen 'rumprobiert und im Rahmen meiner Möglichkeiten eine kleine Trim-Funktion gebastelt:</p>
<pre><code class="language-cpp">void Trim(std::string *s) {
	size_t pos=s-&gt;find_first_not_of(' ');
	if(pos!=s-&gt;npos) {
		s-&gt;erase(s-&gt;begin(),s-&gt;begin()+pos);
	}
	std::basic_string &lt;char&gt;::reverse_iterator rIter=s-&gt;rbegin();
	while(*rIter++==' ') {
		s-&gt;erase(s-&gt;end()-1);
	}
}
</code></pre>
<p>Na los, ihr std::string-Profis, reißt meine Funktion in Stücke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576230</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576230</guid><dc:creator><![CDATA[_matze]]></dc:creator><pubDate>Thu, 04 Sep 2008 06:46:45 GMT</pubDate></item><item><title><![CDATA[Reply to Problem: Suchen in Strings on Thu, 04 Sep 2008 08:16:43 GMT]]></title><description><![CDATA[<p>Hat denn keiner was zu meckern? Dann muss meine Funktion wohl nahe an der Perfektion sein... <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/1576293</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576293</guid><dc:creator><![CDATA[_matze]]></dc:creator><pubDate>Thu, 04 Sep 2008 08:16:43 GMT</pubDate></item><item><title><![CDATA[Reply to Problem: Suchen in Strings on Thu, 04 Sep 2008 08:27:39 GMT]]></title><description><![CDATA[<p>_matze schrieb:</p>
<blockquote>
<p>Dann muss meine Funktion wohl nahe an der Perfektion sein</p>
</blockquote>
<p>Bei weitem 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/1576298</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576298</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 04 Sep 2008 08:27:39 GMT</pubDate></item><item><title><![CDATA[Reply to Problem: Suchen in Strings on Thu, 04 Sep 2008 08:30:42 GMT]]></title><description><![CDATA[<p>KasF schrieb:</p>
<blockquote>
<p>_matze schrieb:</p>
<blockquote>
<p>Dann muss meine Funktion wohl nahe an der Perfektion sein</p>
</blockquote>
<p>Bei weitem 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>
</blockquote>
<p>Dann sag, was nicht in Ordnung ist. Wenn ich schonmal std::string benutze, will ich auch was dabei lernen. <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="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576300</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576300</guid><dc:creator><![CDATA[_matze]]></dc:creator><pubDate>Thu, 04 Sep 2008 08:30:42 GMT</pubDate></item><item><title><![CDATA[Reply to Problem: Suchen in Strings on Thu, 04 Sep 2008 08:46:57 GMT]]></title><description><![CDATA[<p>_matze schrieb:</p>
<blockquote>
<p>Dann sag, was nicht in Ordnung ist.</p>
</blockquote>
<p>Oder ich zeig dir, wie's schöner aussehen könnte:</p>
<pre><code class="language-cpp">string trim(const string&amp; str)
{
    string::size_type pos = str.find_first_not_of(&quot; \n\t&quot;); //etc.. was man will

    if(pos != string::npos )
        return str.substr(pos, str.find_last_not_of(&quot; \n\t&quot;) - pos + 1); 

    return str;
}
</code></pre>
<p>Edit: Wobei man mit isspace noch mehr rausholen könnte, such einfach mal was im Forum <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="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576308</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576308</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 04 Sep 2008 08:46:57 GMT</pubDate></item><item><title><![CDATA[Reply to Problem: Suchen in Strings on Thu, 04 Sep 2008 08:49:34 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/16762">@LadyM</a>: Verwende op&gt;&gt; und du hast viele Probleme weniger ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576312</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576312</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 04 Sep 2008 08:49:34 GMT</pubDate></item><item><title><![CDATA[Reply to Problem: Suchen in Strings on Thu, 04 Sep 2008 12:21:26 GMT]]></title><description><![CDATA[<p>KasF schrieb:</p>
<blockquote>
<p>_matze schrieb:</p>
<blockquote>
<p>Dann sag, was nicht in Ordnung ist.</p>
</blockquote>
<p>Oder ich zeig dir, wie's schöner aussehen könnte:</p>
<pre><code class="language-cpp">string trim(const string&amp; str)
{
    string::size_type pos = str.find_first_not_of(&quot; \n\t&quot;); //etc.. was man will
    
    if(pos != string::npos )
        return str.substr(pos, str.find_last_not_of(&quot; \n\t&quot;) - pos + 1); 
    
    return str;
}
</code></pre>
<p>Edit: Wobei man mit isspace noch mehr rausholen könnte, such einfach mal was im Forum <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="😉"
    /></p>
</blockquote>
<p>Hmm, ja, sieht schöner aus. Und ist auch ein klein wenig schneller (980ms zu 34000ms! <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/1576465</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576465</guid><dc:creator><![CDATA[_matze]]></dc:creator><pubDate>Thu, 04 Sep 2008 12:21:26 GMT</pubDate></item></channel></rss>