<?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[was macht diese Funktion?]]></title><description><![CDATA[<p>Hallo!</p>
<p>Kann jemand so nett sein und mir diese FUnktion hier auskommentieren, also was wo genau passiert? Danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/282824/was-macht-diese-funktion</link><generator>RSS for Node</generator><lastBuildDate>Sat, 22 Aug 2026 21:52:03 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/282824.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 27 Feb 2011 14:34:55 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to was macht diese Funktion? on Tue, 01 Mar 2011 11:06:18 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Kann jemand so nett sein und mir diese FUnktion hier auskommentieren, also was wo genau passiert? Danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2027244</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2027244</guid><dc:creator><![CDATA[Rogi]]></dc:creator><pubDate>Tue, 01 Mar 2011 11:06:18 GMT</pubDate></item><item><title><![CDATA[Reply to was macht diese Funktion? on Sun, 27 Feb 2011 15:32:11 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">int suche(char *stringA, char *stringB) // String A = Suchstring, String B = zu durchsuchender String
{
	char *x = stringA; // String A sichern, da er verändert wird

	while (*stringB) // String B bis zum Ende laufen lassen
	{
		if ((*stringB++ &amp; ~0x20) == (*stringA &amp; ~0x20)) // Vergleich der Zeichen (Groß- und Kleinschreibung ist egal)
		{
			if (!*++stringA) // Suchstring A ist zu ende =&gt; String B enthält String A
			{
				return 1; // Etwas gefunden
			}
		} 
		else
		{
			stringA = x; // Nichts gefunden, also Suchstring zurücksetzen und von vorne durchlaufen
		}
	}

	return 0; // Nichts gefunden
}
</code></pre>
<p>Der Code ist jedenfalls eine absolute Katastrophe. Da wollte jemand besonders coolen Code schreiben und hat damit besonders schlechten Code abgeliefert. Wo auch immer du das her hast, es ist ein echtes Negativbeispiel! Außerdem ist es kein C++, sondern C. <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/2027268</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2027268</guid><dc:creator><![CDATA[jhkhjk]]></dc:creator><pubDate>Sun, 27 Feb 2011 15:32:11 GMT</pubDate></item><item><title><![CDATA[Reply to was macht diese Funktion? on Sun, 27 Feb 2011 15:34:02 GMT]]></title><description><![CDATA[<p>Danke!<br />
Ich hab das in der Tat irgendwie via Google gefunden und blicke im Prinzip null durch was da passiert...<br />
Wie würdest du das denn einfacher lösen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2027270</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2027270</guid><dc:creator><![CDATA[Rogi]]></dc:creator><pubDate>Sun, 27 Feb 2011 15:34:02 GMT</pubDate></item><item><title><![CDATA[Reply to was macht diese Funktion? on Sun, 27 Feb 2011 15:42:49 GMT]]></title><description><![CDATA[<p>Da du das Problem ja anscheinend nur gelöst haben willst anstatt es von Hand zu Programmieren, nimm eine <strong>gute</strong> Bibliothek:<br />
<a href="http://www.boost.org/doc/libs/1_46_0/doc/html/string_algo.html" rel="nofollow">http://www.boost.org/doc/libs/1_46_0/doc/html/string_algo.html</a></p>
<p>Konkret die Funktion boost::icontains.</p>
<p>Da Boost quelloffen ist, kannst du dir auch dort den Quellcode ansehen. Wobei Boostcode in der Regel recht schwer zu lesen ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2027276</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2027276</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sun, 27 Feb 2011 15:42:49 GMT</pubDate></item><item><title><![CDATA[Reply to was macht diese Funktion? on Sun, 27 Feb 2011 15:48:59 GMT]]></title><description><![CDATA[<p>doch doch, ich würde sehr gerne von hand was in c++ programmieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2027278</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2027278</guid><dc:creator><![CDATA[Rogi]]></dc:creator><pubDate>Sun, 27 Feb 2011 15:48:59 GMT</pubDate></item><item><title><![CDATA[Reply to was macht diese Funktion? on Sun, 27 Feb 2011 15:51:42 GMT]]></title><description><![CDATA[<p>Eine nicht effiziente, aber einfache, Idee: Transformiere zunächst beide Zeichenketten nach nur Groß- oder nur Kleinschreibung. Dann benutzt du die Standardsuchalgorithmen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2027280</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2027280</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sun, 27 Feb 2011 15:51:42 GMT</pubDate></item><item><title><![CDATA[Reply to was macht diese Funktion? on Sun, 27 Feb 2011 15:58:58 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;iostream&gt;
#include &lt;algorithm&gt;

size_t suche(std::string input, std::string search)
{
	std::transform(input.begin(), input.end(), input.begin(), toupper);
	std::transform(search.begin(), search.end(), search.begin(), toupper);

	return input.find(search);
}

int main()
{
	std::string A = &quot;Hallo Welt und so...&quot;;
	std::string B = &quot;welt&quot;;

	size_t pos;
	if ((pos = suche(A, B)) != std::string::npos)
	{
		std::cout &lt;&lt; &quot;Gefunden: &quot; &lt;&lt; A.substr(pos) &lt;&lt; &quot;\n&quot;;
	}
	else
	{
		std::cout &lt;&lt; &quot;Nicht gefunden!\n&quot;;
	}

	return 0;
}
</code></pre>
<p>Simpel.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2027283</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2027283</guid><dc:creator><![CDATA[jhkhjk]]></dc:creator><pubDate>Sun, 27 Feb 2011 15:58:58 GMT</pubDate></item><item><title><![CDATA[Reply to was macht diese Funktion? on Sun, 27 Feb 2011 16:10:10 GMT]]></title><description><![CDATA[<p>jhkhjk schrieb:</p>
<blockquote>
<p>Außerdem ist es kein C++, sondern C. <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>
</blockquote>
<p>Das sehe ich jetzt nicht. Ist es nicht eher sowohl C als auch C++?</p>
<p>jhkhjk schrieb:</p>
<blockquote>
<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;iostream&gt;
#include &lt;algorithm&gt;

size_t suche(std::string input, std::string search)
{
	std::transform(input.begin(), input.end(), input.begin(), toupper);
	std::transform(search.begin(), search.end(), search.begin(), toupper);

	return input.find(search);
}

int main()
{
	std::string A = &quot;Hallo Welt und so...&quot;;
	std::string B = &quot;welt&quot;;

	size_t pos;
	if ((pos = suche(A, B)) != std::string::npos)
	{
		std::cout &lt;&lt; &quot;Gefunden: &quot; &lt;&lt; A.substr(pos) &lt;&lt; &quot;\n&quot;;
	}
	else
	{
		std::cout &lt;&lt; &quot;Nicht gefunden!\n&quot;;
	}

	return 0;
}
</code></pre>
<p>Simpel.</p>
</blockquote>
<p>Wenn das C++ ist, dann mag ich es irgendwie nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2027289</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2027289</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sun, 27 Feb 2011 16:10:10 GMT</pubDate></item><item><title><![CDATA[Reply to was macht diese Funktion? on Sun, 27 Feb 2011 17:08:09 GMT]]></title><description><![CDATA[<p>Und dann auch noch ernstgemeinte Beiträge löschen und nicht mal auf die berechtigten(!) Fragen anderer Forenteilnehmer eingehen. Das ist so arm! <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>Du bist es _NICHT_</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2027319</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2027319</guid><dc:creator><![CDATA[jkljkl]]></dc:creator><pubDate>Sun, 27 Feb 2011 17:08:09 GMT</pubDate></item><item><title><![CDATA[Reply to was macht diese Funktion? on Sun, 27 Feb 2011 20:12:36 GMT]]></title><description><![CDATA[<p>Rogi schrieb:</p>
<blockquote>
<p>Kann jemand so nett sein und mir diese FUnktion hier auskommentieren (...)</p>
</blockquote>
<p>Ich bin mir sicher dass das vielen von euch durch den Kopf gegangen ist beim Lesen dieser Frage, daher ...:</p>
<pre><code class="language-cpp">/*
int suche(char *stringA, char *stringB)
{
char *x = stringA;

while (*stringB){
if ((*stringB++ &amp; ~0x20) == (*stringA &amp; ~0x20)){
if (!*++stringA)
return 1;
} else
stringA = x;
}
return 0;
}
*/
</code></pre>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2027408</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2027408</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sun, 27 Feb 2011 20:12:36 GMT</pubDate></item><item><title><![CDATA[Reply to was macht diese Funktion? on Sun, 27 Feb 2011 20:23:27 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/13960">@hustbaer</a>: lol</p>
<p>Hier ein Weg, wie man auch nicht zu viel überlegen muß, aber nicht vorher transformiert werden muß:</p>
<pre><code class="language-cpp">struct CaseInsesitiveCharCompare{
    bool operator()(char a,char b){
        return std::toupper(a)==std::toupper(b);
    }
};

size_t suche(std::string input, std::string search){
    std::string::iterator pos=std::search(input.begin(),input.end(),search.begin(),search.end(),CaseInsesitiveCharCompare());
    if(pos==input.end())
        return std::string::npos;
    return pos-input.begin();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2027410</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2027410</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sun, 27 Feb 2011 20:23:27 GMT</pubDate></item><item><title><![CDATA[Reply to was macht diese Funktion? on Sun, 27 Feb 2011 20:32:46 GMT]]></title><description><![CDATA[<p>Wieso hast du hier ein strcut genommen, und nicht gleich eine Funktion geschrieben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2027414</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2027414</guid><dc:creator><![CDATA[Struktur]]></dc:creator><pubDate>Sun, 27 Feb 2011 20:32:46 GMT</pubDate></item><item><title><![CDATA[Reply to was macht diese Funktion? on Sun, 27 Feb 2011 20:42:35 GMT]]></title><description><![CDATA[<p>Struktur schrieb:</p>
<blockquote>
<p>Wieso hast du hier ein strcut genommen, und nicht gleich eine Funktion geschrieben?</p>
</blockquote>
<p>Also das hier:</p>
<pre><code class="language-cpp">bool CaseInsesitiveCharCompare(char a,char b){
    return std::toupper(a)==std::toupper(b);
}

size_t suche(std::string input, std::string search){
    std::string::iterator pos=std::search(input.begin(),input.end(),search.begin(),search.end(),&amp;CaseInsesitiveCharCompare);
    if(pos==input.end())
        return std::string::npos;
    return pos-input.begin();
}
</code></pre>
<p>Weil die struct quasi garantiert, daß der Vergleich inline gemacht wird, denn für search&lt;...,CaseInsesitiveCharCompare&gt; muß neuer Code gebastelt werden. search weiß dann genau, welche Vergleichsfunktion ich verwende und kann inlinen.</p>
<p>Beim Funktionszeiger wird search&lt;...,bool(*)(char,char)&gt; verwendet und die Info, welche Vergleichsfunktion genommen wird, erfährt search erst zur Laufzeit. Es ist zu füchten, daß dann ein Funktionsaufruf über den Funktionszeiger gemacht wird und nicht inline. Außer er optimiert ganz schlau.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2027417</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2027417</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sun, 27 Feb 2011 20:42:35 GMT</pubDate></item><item><title><![CDATA[Reply to was macht diese Funktion? on Mon, 28 Feb 2011 00:12:57 GMT]]></title><description><![CDATA[<p>jhkhjk schrieb:</p>
<blockquote>
<pre><code class="language-cpp">std::transform(input.begin(), input.end(), input.begin(), toupper);
    std::transform(search.begin(), search.end(), search.begin(), toupper);
</code></pre>
</blockquote>
<p>Das ist aus drei Gründen problematisch: Du bindest &lt;cctype&gt; nicht ein, toupper befindet sich im Namensraum std, und es kann sich, wenn die ersten beiden Probleme beseitigt sind, mit toupper aus &lt;locale&gt; beißen.</p>
<p>Wie dem auch sei, wenn wir schon über C++ vs. C sprechen, dann finde ich, es wäre guter Stil, sich nicht an die alte C-Locale zu binden. Ich schlage Folgendes vor:</p>
<pre><code class="language-cpp">#include &lt;algorithm&gt;
#include &lt;locale&gt;
#include &lt;iostream&gt;
#include &lt;string&gt;

class ci_compare {
public:
  ci_compare(std::locale const &amp;loc = std::locale()) : loc_(loc) { }

  inline bool operator()(char c, char d) const {
    return std::tolower(c, loc_) == std::tolower(d, loc_);
  }

private:
  std::locale loc_;
};

std::string::size_type isuche(std::string const &amp;haystack,
                              std::string const &amp;needle,
                              std::locale const &amp;loc = std::locale()) {
  std::string::const_iterator pos = std::search(haystack.begin(), haystack.end(),
                                                needle  .begin(), needle  .end(),
                                                ci_compare(loc));

  return pos != haystack.end() ? pos - haystack.begin() : std::string::npos;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2027485</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2027485</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Mon, 28 Feb 2011 00:12:57 GMT</pubDate></item><item><title><![CDATA[Reply to was macht diese Funktion? on Mon, 28 Feb 2011 14:19:22 GMT]]></title><description><![CDATA[<p>Das erinnert mich an <a href="http://www.boostcon.com/site-media/var/sphene/sphwiki/attachment/2009/05/08/iterators-must-go.pdf" rel="nofollow">Iterators Must Go</a> <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>Warning sign #2 schrieb:</p>
<blockquote>
<p>File copy circa 1975:</p>
<pre><code class="language-cpp">#include &lt;stdio.h&gt;
int main() {
  int c;
  while ((c = getchar()) != EOF)
    putchar(c);
  return errno != 0;
}
</code></pre>
<p>Fast forward 20 years, and. . .</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;algorithm&gt;
#include &lt;iterator&gt;
#include &lt;string&gt;
using namespace std;

int main() {
  copy(istream_iterator&lt;string&gt;(cin),
  istream_iterator&lt;string&gt;(),
  ostream_iterator&lt;string&gt;(cout,&quot;\n&quot;));
}
</code></pre>
<p>(forgot the try/catch around main)</p>
<p><em><strong>Something, somewhere, went terribly wrong.</strong></em></p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2027667</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2027667</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 28 Feb 2011 14:19:22 GMT</pubDate></item><item><title><![CDATA[Reply to was macht diese Funktion? on Mon, 28 Feb 2011 20:12:00 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Das erinnert mich an <a href="http://www.boostcon.com/site-media/var/sphene/sphwiki/attachment/2009/05/08/iterators-must-go.pdf" rel="nofollow">Iterators Must Go</a> <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>Warning sign #2 schrieb:</p>
<blockquote>
<p>File copy circa 1975:</p>
<pre><code class="language-cpp">#include &lt;stdio.h&gt;
int main() {
  int c;
  while ((c = getchar()) != EOF)
    putchar(c);
  return errno != 0;
}
</code></pre>
<p>Fast forward 20 years, and. . .</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;algorithm&gt;
#include &lt;iterator&gt;
#include &lt;string&gt;
using namespace std;

int main() {
  copy(istream_iterator&lt;string&gt;(cin),
  istream_iterator&lt;string&gt;(),
  ostream_iterator&lt;string&gt;(cout,&quot;\n&quot;));
}
</code></pre>
<p>(forgot the try/catch around main)</p>
<p><em><strong>Something, somewhere, went terribly wrong.</strong></em></p>
</blockquote>
</blockquote>
<p>HAHAHAHAHAA^^ ders gut <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/2027823</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2027823</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Mon, 28 Feb 2011 20:12:00 GMT</pubDate></item></channel></rss>