<?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[Suche via std::search innerhalb meiner Klasse und weiteren Suchoptionen]]></title><description><![CDATA[<p>Hallo zusammen!</p>
<p>Mein Problem ist folgendes:<br />
Ich verwende die Funktion std::search aus dem Header &lt;algorithm&gt;, um in einem String einen Teilstring zu suchen (wahlweise case-(in)sensetive). Dazu übergebe ich eine entsprechende Vergleichsmethode, die natürlich statisch ist. (Die Funktion std::search wird innerhalb einer Methode (nicht statisch) meiner Klasse aufgerufen.) Nun kann man aber festlegen, dass in der Suchmaske auch Wildcards enthalten sein dürfen (z.B. '?' für einzelne Zeichen). Die dahinter steckende Suchlogik ist ja nicht schwer, <strong><em>aber das Problem ist</em>, dass ich der Vergleichsfunktion, die std::search erwartet, nicht noch weitere Parameter übergeben kann und die Vergleichsmethode ja selbst statisch ist (muss sie ja) und ich so auch keinen Zugriff auf den this-Zeiger habe.</strong></p>
<p>Hat jemand eine Idee, wie ich das Problem lösen kann? <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>viele Grüße und danke schonmal,<br />
Tommy.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/222506/suche-via-std-search-innerhalb-meiner-klasse-und-weiteren-suchoptionen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 05 Oct 2026 01:16:14 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/222506.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 13 Sep 2008 16:12:10 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Suche via std::search innerhalb meiner Klasse und weiteren Suchoptionen on Sat, 13 Sep 2008 16:12:10 GMT]]></title><description><![CDATA[<p>Hallo zusammen!</p>
<p>Mein Problem ist folgendes:<br />
Ich verwende die Funktion std::search aus dem Header &lt;algorithm&gt;, um in einem String einen Teilstring zu suchen (wahlweise case-(in)sensetive). Dazu übergebe ich eine entsprechende Vergleichsmethode, die natürlich statisch ist. (Die Funktion std::search wird innerhalb einer Methode (nicht statisch) meiner Klasse aufgerufen.) Nun kann man aber festlegen, dass in der Suchmaske auch Wildcards enthalten sein dürfen (z.B. '?' für einzelne Zeichen). Die dahinter steckende Suchlogik ist ja nicht schwer, <strong><em>aber das Problem ist</em>, dass ich der Vergleichsfunktion, die std::search erwartet, nicht noch weitere Parameter übergeben kann und die Vergleichsmethode ja selbst statisch ist (muss sie ja) und ich so auch keinen Zugriff auf den this-Zeiger habe.</strong></p>
<p>Hat jemand eine Idee, wie ich das Problem lösen kann? <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>viele Grüße und danke schonmal,<br />
Tommy.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1581395</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1581395</guid><dc:creator><![CDATA[(*Tommy)-&amp;gt;question();]]></dc:creator><pubDate>Sat, 13 Sep 2008 16:12:10 GMT</pubDate></item><item><title><![CDATA[Reply to Suche via std::search innerhalb meiner Klasse und weiteren Suchoptionen on Sat, 13 Sep 2008 16:58:43 GMT]]></title><description><![CDATA[<p>Wenn ich dein Problem richtig verstehe, suchst du Funktoren, oder auch Funktionsobjekte genannt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1581434</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1581434</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sat, 13 Sep 2008 16:58:43 GMT</pubDate></item><item><title><![CDATA[Reply to Suche via std::search innerhalb meiner Klasse und weiteren Suchoptionen on Sat, 13 Sep 2008 20:11:36 GMT]]></title><description><![CDATA[<p>Hi, danke erstmal für Deine Antwort!</p>
<p>Ich kannte Funktoren bisher nicht und habe mich mal schlau gemacht (-&gt; <a href="http://www.cpp-tutor.de/cpp/le18/le18_03.htm" rel="nofollow">http://www.cpp-tutor.de/cpp/le18/le18_03.htm</a>)... .<br />
Also wenn ich das richtig verstanden habe, bringen die mich aber nicht weiter.</p>
<p>Hier mal ein (Pseudo-)Code, der mein Problem verdeutlicht:</p>
<pre><code class="language-cpp">class A
{
    std::string str;
    bool casesense;

    static bool compare1(char s1, char s2)
    { return (s1 == s2); }
    bool compare2(char s1, char s2) const
    {
         if(this-&gt;casesense) // Problem, da this ja nur ohne static geht, std::search aber ne Funktion erwartet.
            return (toupper(s1) == toupper(s2));
         else
            return (s1 == s2);
    }

    public:
      int suche(const std::string&amp; what) const
      {
         std::string::const_iterator i = std::search(str.begin(), str.end(), what.begin(), what.end(), compare1);
         if(i == str.end())
            return -1;
         else
            return i - str.begin();
      }
}
</code></pre>
<p>Wenn ich im obrigen Code nun <code>compare2</code> an std::search statt <code>compare1</code> übergebe, gibts Compilier-Fehler. Wie kann ich nun meine compare2-<strong>Methode</strong> (<em>anstatt</em> der (<strong>statischen</strong>) compare1-<strong>Funktion</strong>) übergeben, sodass ich innerhalb der Vergleichsfunktion, die ja von std::search aufgerufen wird, auf den this-Zeiger zugreifen kann?</p>
<p>Ich habe auch schon Interessantes aus dem Header <code>&lt;functional&gt;</code> wie z.B. <code>mem_fun_ref</code> gefunden, aber irgenwie löst das mein Problem nicht, auch wenn vllt. die Richtung stimmt <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>Auf jeden Fall danke für Deine/eure Bemühungen! <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/1581493</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1581493</guid><dc:creator><![CDATA[(*Tommy)-&amp;gt;question();]]></dc:creator><pubDate>Sat, 13 Sep 2008 20:11:36 GMT</pubDate></item><item><title><![CDATA[Reply to Suche via std::search innerhalb meiner Klasse und weiteren Suchoptionen on Sat, 13 Sep 2008 20:15:33 GMT]]></title><description><![CDATA[<p>Mir fällt grad nochwas ein (hat aber damit nicht direkt zu tun): Gibt es eine search-Methode, die wie std::string::rfind von hinten nach vorne sucht? Habe im Header &lt;algorithm&gt; keine gefunden (oder übersehen?)... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>PS: Beim Vertauschen der Iteratoren bei std::search gibts ne Assertion mit &quot;invalid iterator range...&quot;. Das habe ich schon ausprobiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1581497</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1581497</guid><dc:creator><![CDATA[(*Tommy)-&amp;gt;question();]]></dc:creator><pubDate>Sat, 13 Sep 2008 20:15:33 GMT</pubDate></item><item><title><![CDATA[Reply to Suche via std::search innerhalb meiner Klasse und weiteren Suchoptionen on Sat, 13 Sep 2008 21:49:23 GMT]]></title><description><![CDATA[<p>Warum machst du da ne static Memberfunction? Mach die unabhängig von der Klasse und füge dort halt ne funktion, wie isCaseSense hinzu. Dann kannst du das ganz einfach machen.</p>
<p>Du kannst ja rbegin und rend brauchen, um von hinten nach vorne zu arbeiten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1581532</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1581532</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sat, 13 Sep 2008 21:49:23 GMT</pubDate></item><item><title><![CDATA[Reply to Suche via std::search innerhalb meiner Klasse und weiteren Suchoptionen on Sat, 13 Sep 2008 21:57:48 GMT]]></title><description><![CDATA[<p>Hm, aber in einer (unabhängigen) Funktion kann ich doch auch nicht auf den this-Zeiger zugreifen...oder wie meinst Du das? Also diese Methode &quot;suche&quot;, die die Funktion std::search verwendet ist halt an eine Klasse gebunden und das was durchsucht wird (&quot;str&quot;) ebenfalls (und das soll auch so bleiben^^).</p>
<p>Wie würdest Du denn eine solche Funktion deklarieren? <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>
<p>thx!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1581535</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1581535</guid><dc:creator><![CDATA[(*Tommy)-&amp;gt;question();]]></dc:creator><pubDate>Sat, 13 Sep 2008 21:57:48 GMT</pubDate></item><item><title><![CDATA[Reply to Suche via std::search innerhalb meiner Klasse und weiteren Suchoptionen on Sat, 13 Sep 2008 22:15:04 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">class compare
{
	bool Casesense;
public:
	explicit compare (bool b):Casesense(b){}

	bool operator () (const char c1, const char c2)
	{
		if(Casesense)
			return (toupper(c1) == toupper(c2));
		else
			return (c2 == c2);
	}
};

class A
{    
    std::string str;
    bool casesense;

public:
	int suche(const std::string&amp; what) const
	{
		std::string::const_iterator i = std::search(str.begin(), str.end(), what.begin(), what.end(), compare (casesense) );
		if(i == str.end())
			return -1;
		else
			return i - str.begin();
	}
};
</code></pre>
<p>Jetzt mal rein allgemein gesehen. Ich würde das ganze Design wahrscheinlich anders machen. <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="😉"
    /> Kommt halt auf die Anforderungen an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1581538</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1581538</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sat, 13 Sep 2008 22:15:04 GMT</pubDate></item><item><title><![CDATA[Reply to Suche via std::search innerhalb meiner Klasse und weiteren Suchoptionen on Sat, 13 Sep 2008 22:42:38 GMT]]></title><description><![CDATA[<p>Wuhuuuu, ich werd verrückt, das funktioniert <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="🙂"
    /> - tausend Dank! Genau das, hab' ich gesucht <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>Dann hab ich damit noch ein Problemchen:</p>
<blockquote>
<p>Du kannst ja rbegin und rend brauchen, um von hinten nach vorne zu arbeiten.</p>
</blockquote>
<p>Die Methoden geben alle einen 'reverse_iterator' zurück. Die Funktion <code>std::search</code> erwartet aber einen Forward-Iterator und anscheinend sind die auch nicht kompatibel (Compiler beschwert sich^^).</p>
<p>Nochmal danke, hast mir echt weitergeholfen! <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/1581553</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1581553</guid><dc:creator><![CDATA[(*Tommy)-&amp;gt;question();]]></dc:creator><pubDate>Sat, 13 Sep 2008 22:42:38 GMT</pubDate></item><item><title><![CDATA[Reply to Suche via std::search innerhalb meiner Klasse und weiteren Suchoptionen on Sat, 13 Sep 2008 23:03:09 GMT]]></title><description><![CDATA[<p>Ich weiss zwar nicht, was du genau erreichen willst, aber es gibt da ja auch noch std::find.<br />
Damit kannst du das sehr viel einfacher machen, was wir bis jetzt haben. <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>
<pre><code class="language-cpp">class A
{    
    std::string str;
    bool casesense;

public:
    int suche(const std::string&amp; what) const
    {
        return str.find (what.c_str());
    }
};
</code></pre>
<p>Der Rückgabewert für nicht gefunden ist jetzt einfach std::string::npos</p>
<p>Schau sonst mal hier rein:<br />
<a href="http://www.cplusplus.com/reference/string/string/find.html" rel="nofollow">http://www.cplusplus.com/reference/string/string/find.html</a></p>
<p>Da findest du bestimmt das,wonach du suchst. Und wenn nicht, dann schau nochmal hier nach:<br />
<a href="http://www.cplusplus.com/reference/algorithm/" rel="nofollow">http://www.cplusplus.com/reference/algorithm/</a></p>
<p>Und wenn du dann immernoch nicht das passende gefunden hast, schreibst du was eigenes. Und wenn du das dann nicht hinkriegst mit deiner genauen Vorstellung nochmal posten. <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>
<p>Ich persönlich tippe einfach mal ins Blaue, dass du std::string::find_first_of() suchst. Jetzt musst du diese Funktion nur noch einsetzen (was nicht allzu schwer ist).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1581560</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1581560</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sat, 13 Sep 2008 23:03:09 GMT</pubDate></item><item><title><![CDATA[Reply to Suche via std::search innerhalb meiner Klasse und weiteren Suchoptionen on Sat, 13 Sep 2008 23:10:53 GMT]]></title><description><![CDATA[<p>Öhm, ne die Methoden bzw. Links sind mir bekannt nur so einfach ist die Sache leider net^^.</p>
<p>Ich will das, was std::string::rfind macht, effizient nachprogrammieren bzw. suche dafür eine Funktion alá std::search (was ja äquivalent zu std::string::find ist). Der einfach Grund für das Vorhaben ist (u.a.), dass rfind bzw. find keine Wildcards unterstützen <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/1581566</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1581566</guid><dc:creator><![CDATA[(*Tommy)-&amp;gt;question();]]></dc:creator><pubDate>Sat, 13 Sep 2008 23:10:53 GMT</pubDate></item><item><title><![CDATA[Reply to Suche via std::search innerhalb meiner Klasse und weiteren Suchoptionen on Sat, 13 Sep 2008 23:16:02 GMT]]></title><description><![CDATA[<p>search gibt einen zum ersten Argumentpaar passenden Iterator zurück. Sind diese Iteratoren reverse-Iteratoren gilt das entsprechend auch für den Rückgabewert. Dann muss der Rest des Codes entsprechend angepasst werden:</p>
<pre><code class="language-cpp">int suche(const std::string&amp; what) const
    {
        std::string::const_reverse_iterator i = std::search(str.rbegin(), str.rend(), what.begin(), what.end(), compare (casesense) );
        return str.rend() - i - 1;
    }
</code></pre>
<p>oder man geht zum jeweiligen Element gehörigen normalen Iterator zurück.</p>
<pre><code class="language-cpp">int suche(const std::string&amp; what) const
    {
        std::string::const_iterator i = std::search(str.rbegin(), str.rend(), what.begin(), what.end(), compare (casesense) ).base();
        return i - str.begin() - 1;
    }
</code></pre>
<p>Für Faule gibt es natürlich auch noch string::find&amp;co</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1581568</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1581568</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sat, 13 Sep 2008 23:16:02 GMT</pubDate></item><item><title><![CDATA[Reply to Suche via std::search innerhalb meiner Klasse und weiteren Suchoptionen on Sat, 13 Sep 2008 23:22:15 GMT]]></title><description><![CDATA[<blockquote>
<p>Für Faule gibt es natürlich auch noch string::find&amp;co</p>
</blockquote>
<p>Was hast das mit faul zu tun, wenn man die Algorithmen nimmt, die auf das Problem passen? (Auch wenn das hier jetzt nicht der Fall ist)</p>
<p>Ich schreibe ja auch nicht jedesmal, wenn ich etwas sortieren will den Algorithmus neu.. <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/1581573</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1581573</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sat, 13 Sep 2008 23:22:15 GMT</pubDate></item><item><title><![CDATA[Reply to Suche via std::search innerhalb meiner Klasse und weiteren Suchoptionen on Sun, 14 Sep 2008 15:14:21 GMT]]></title><description><![CDATA[<p>Jo danke, nach Deinen tausend Edit's funktionierts jetzt <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>Aber bzgl.:</p>
<p>camper schrieb:</p>
<blockquote>
<p>Für Faule gibt es natürlich auch noch string::find&amp;co</p>
</blockquote>
<p>...haste Dir mal meinen vorletzten Post durchgelesen? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/27a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--right_arrow"
      title=":arrow_right:"
      alt="➡"
    /> Anscheinend *nicht*...</p>
<p>Auch nochmal <a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/18422">@drakon</a> danke! <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/1581769</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1581769</guid><dc:creator><![CDATA[(*Tommy)-&amp;gt;question();]]></dc:creator><pubDate>Sun, 14 Sep 2008 15:14:21 GMT</pubDate></item></channel></rss>