<?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[Vector aus Strings durchsuchen]]></title><description><![CDATA[<p>Ich versuche gerade ein File in einen Vector einzulesen und anschließend den Vector zu durchsuchen. Bisheriger Code:</p>
<pre><code class="language-cpp">ConfigFile.open(&quot;Config.txt&quot;);
	// If file exists
	if (ConfigFile.is_open())
	{
		cout &lt;&lt; &quot;File found \n&quot;;

		vector&lt;string&gt; FileContents;     
                // Read file in vector
		for (string RowFromFile; getline(ConfigFile, RowFromFile); )        
			FileContents.push_back(RowFromFile);  

		// Search for &quot;Command:&quot;
		string SearchString (&quot;Command:&quot;);
		vector&lt;string&gt;::iterator Iterator;
		Iterator = find(FileContents.begin(), FileContents.end(), SearchString.c_str());

		if (Iterator == FileContents.end())
			cout &lt;&lt; &quot;Not found.&quot;;
		else
			cout &lt;&lt; *Iterator &lt;&lt; &quot; was found.&quot;;
[...]
</code></pre>
<p>Das funktioniert allerdings nur wenn in meinem File &quot;Command:&quot; allein als Zeile dasteht. Mein File sieht allerdings so aus:<br />
Command:INIT<br />
und ich möchte das entsprechend parsen. Ich habe leider nichts passendes gefunden und online finden sich fast nur Beispiele wie man in Strings sucht oder einzelne Zeichen oder Integer Werte aus einem Vektor rausholen kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/180566/vector-aus-strings-durchsuchen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 21 Sep 2026 21:14:01 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/180566.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 04 May 2007 08:11:31 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Vector aus Strings durchsuchen on Fri, 04 May 2007 08:11:31 GMT]]></title><description><![CDATA[<p>Ich versuche gerade ein File in einen Vector einzulesen und anschließend den Vector zu durchsuchen. Bisheriger Code:</p>
<pre><code class="language-cpp">ConfigFile.open(&quot;Config.txt&quot;);
	// If file exists
	if (ConfigFile.is_open())
	{
		cout &lt;&lt; &quot;File found \n&quot;;

		vector&lt;string&gt; FileContents;     
                // Read file in vector
		for (string RowFromFile; getline(ConfigFile, RowFromFile); )        
			FileContents.push_back(RowFromFile);  

		// Search for &quot;Command:&quot;
		string SearchString (&quot;Command:&quot;);
		vector&lt;string&gt;::iterator Iterator;
		Iterator = find(FileContents.begin(), FileContents.end(), SearchString.c_str());

		if (Iterator == FileContents.end())
			cout &lt;&lt; &quot;Not found.&quot;;
		else
			cout &lt;&lt; *Iterator &lt;&lt; &quot; was found.&quot;;
[...]
</code></pre>
<p>Das funktioniert allerdings nur wenn in meinem File &quot;Command:&quot; allein als Zeile dasteht. Mein File sieht allerdings so aus:<br />
Command:INIT<br />
und ich möchte das entsprechend parsen. Ich habe leider nichts passendes gefunden und online finden sich fast nur Beispiele wie man in Strings sucht oder einzelne Zeichen oder Integer Werte aus einem Vektor rausholen kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1278563</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1278563</guid><dc:creator><![CDATA[asdrubael]]></dc:creator><pubDate>Fri, 04 May 2007 08:11:31 GMT</pubDate></item><item><title><![CDATA[Reply to Vector aus Strings durchsuchen on Fri, 04 May 2007 08:23:45 GMT]]></title><description><![CDATA[<p>Erstens: An dieser Stelle brauchst du den c_str() Aufruf nicht (der bremst dich nur aus).</p>
<p>Zweitens: Dafür gibt es find_if:</p>
<pre><code class="language-cpp">struct starts_with : public unary_function&lt;string,bool&gt;
{
  starts_with(const string&amp; value) : m_val(value);
  bool operator()(const string&amp; data)
  { return data.find(m_val)==0; }
private:
  const string&amp; m_val;
};

...
Iterator = find_if(FileContents.begin(),FileContents.end(),starts_with(SearchString));
...
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1278573</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1278573</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 04 May 2007 08:23:45 GMT</pubDate></item><item><title><![CDATA[Reply to Vector aus Strings durchsuchen on Fri, 04 May 2007 10:35:06 GMT]]></title><description><![CDATA[<p>Super, danke hat funktioniert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1278662</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1278662</guid><dc:creator><![CDATA[asdrubael]]></dc:creator><pubDate>Fri, 04 May 2007 10:35:06 GMT</pubDate></item><item><title><![CDATA[Reply to Vector aus Strings durchsuchen on Fri, 04 May 2007 20:13:44 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Erstens: An dieser Stelle brauchst du den c_str() Aufruf nicht (der bremst dich nur aus).</p>
<p>Zweitens: Dafür gibt es find_if:</p>
<pre><code class="language-cpp">struct starts_with : public unary_function&lt;string,bool&gt;
{
  starts_with(const string&amp; value) : m_val(value);
  bool operator()(const string&amp; data)
  { return data.find(m_val)==0; }
private:
  const string&amp; m_val;
};

...
Iterator = find_if(FileContents.begin(),FileContents.end(),starts_with(SearchString));
...
</code></pre>
</blockquote>
<p>Ein paar mehr Gedanken sollte man sich schon noch machen:<br />
1. Zunächst einmal sind Referenzen ziemlich bösartige Klaasenmitglieder. Im Allgemeinen ist es keine gute Idee sie ohne besonderen Grund zu verwenden. Die Kopierbarkeit beeinträchtigt es nicht, aber es sind Algorithmen denkbar (wohl nicht die aus der Standardbibliothek), die diese auch einmal zuweisen wollen.<br />
2. Zudem hat das Funktionsobjekt keinen echten state, der member m_val ist ja eigentlich eher so etwas wie ein gebundener Parameter. Dann ist es logisch richtig, wenn unser Operator() konstant ist.<br />
3. Fliegt uns das Ganze um die Ohren, wenn jemand auf die Idee kommt, hier den Konstruktor mit einem Literal zu führen - das hat auch etwas mit Punkt 1 zu tun.<br />
Gedankenloses Ersetzen von Objekten durch Referenzen ist nicht ohne Tücken.</p>
<p>also:</p>
<pre><code class="language-cpp">struct starts_with : public unary_function&lt;string,bool&gt;
{
  starts_with(const string&amp; value) : m_val(value) {}
  bool operator()(const string&amp; data) const
  { return data.find(m_val)==0; }
private:
  string m_val;
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1278985</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1278985</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 04 May 2007 20:13:44 GMT</pubDate></item></channel></rss>