<?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[[Gelöst]map find liefert keine ausgabe]]></title><description><![CDATA[<p>Versuche länger schon mit find einen rückgabe wert zu bekommen ohe erfolg. Weiß einfach nicht meht weiter, scheint aber mit der schleife zusammen zuhängen aushalb einer schleife eingeführtes mit insert funktioniert.</p>
<p>cgi.cpp</p>
<pre><code class="language-cpp">#include &lt;iostream&gt; 
#include &lt;string&gt; 
#include &lt;fstream&gt; 
#include &lt;vector&gt;
#include &lt;map&gt;
#include &lt;algorithm&gt;
#include &quot;cgi.h&quot; 

#define CGI

using std::vector;
using namespace std;

/*
The cgi request function to get the cgi query_string 
*/

namespace cgi
{

bool request()
{
	query_string = string();
	char *request = getenv(&quot;REQUEST_METHOD&quot;);
	char *env = getenv(&quot;QUERY_STRING&quot;);
	char *clength = getenv (&quot;CONTENT_LENGTH&quot;);

	if( request == 0 ) 
	{ 
		return false;
	}

		else if(request == std::string(&quot;GET&quot;)) 
		{ 
        		if (env != 0) 
         		{ 
				query_string = env;
				return true;
         		}
		else return false;
		}

		else if(request == std::string(&quot;POST&quot;))
		{

	 		if (clength != 0)
			{
	 			getline(cin, query_string);;
				return true;
			}

		else return false;
		}

	else return false;

}

/*
This function formated the cgi input.
*/

void urlencode() // hole query string pair speicher dieses in einem vector
{
	unsigned int len;
	len = query_string.length();

	for (std::size_t pos = query_string.find(&quot;+&quot;); pos != std::string::npos; pos = query_string.find(&quot;+&quot;, ++pos)) 
        query_string.replace(pos, 1, &quot; &quot;); 

	size_t pos = 0; 
	size_t old_pos = 0; 

	while(len &gt; pos)
		{

                 pos = query_string.find(&quot;&amp;&quot;, old_pos); 

                 if (pos == string::npos) 
                 	pos = query_string.length();

		query_tmp.push_back(query_string.substr(old_pos, pos-old_pos)); //in vector zurückgeben

		old_pos = pos+1; 	
		};

vector&lt;string&gt;::iterator copy;

size_t start = 0;
size_t end = 0;

// im vector wird paar zerlegt umd in einer map zurück gegeben
for(copy = query_tmp.begin(); copy != query_tmp.end(); copy++)
{
	string tmp= *copy;

	start = tmp.find(&quot;=&quot;);
	end = ++start;

	query.insert(QueryPair(tmp.substr(0, --start) ,tmp.substr(end)));
}

}

//get query single ouput
const string getcgidata(string formname)
{

Query::iterator iter;
Query::const_iterator search = query.find(formname);

//ausgabe aller map objecte funktioniert
for( iter = query.begin(); iter != query.end(); ++iter ) { 
     cout &lt;&lt; &quot;Key: '&quot; &lt;&lt; iter-&gt;first &lt;&lt; &quot;', Value: &quot; &lt;&lt; iter-&gt;second &lt;&lt; endl;
	search = query.find(formname); //versuch mit find funtioniert nicht
} 

  	 if(search == query.end())
  	 { 
   	  return &quot;error&quot;; 
  	 } 
	return search-&gt;second;

}

}
</code></pre>
<p>cgi.h</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;map&gt;
#include &lt;algorithm&gt;
#include &lt;vector&gt;

using std::vector;
using namespace std;

namespace cgi
{
std::string query_string;
typedef map&lt;std::string,std::string &gt; Query;
typedef Query::value_type QueryPair;
Query query;

vector&lt;string&gt; query_tmp;

bool request(); //GET CGI DATA

void urlencode(); // parse the CGI query_string

const string getcgidata(string formname); // cgi single ouput

}
</code></pre>
<p>test.cpp</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;c++pwl/html.h&gt;
#include &lt;c++pwl/cgi.h&gt;
#include &lt;map&gt;
#include &lt;vector&gt;

using namespace std;
using namespace cgi;
using namespace html;

int main()
{
starthtml(&quot;TEST1&quot;);

startform(&quot;GET&quot;, &quot;test&quot;);
formselect(&quot;test&quot;,&quot;&lt;option&gt;Moin&lt;/option&gt; &lt;option&gt; Tach &lt;/option&gt; &lt;option&gt; guten tag &lt;/option&gt;&quot;);
formselect(&quot;test1&quot;,&quot;&lt;option&gt;Schuess&lt;/option&gt; &lt;option&gt; Bye &lt;/option&gt; &lt;option&gt; Auf wiedersehen &lt;/option&gt;&quot;);
input(&quot;Schicken&quot;, &quot;submit&quot;);
endform();

request();  //query abholen
urlencode(); //query in map zurückgeben

string output;
output = getcgidata(&quot;test&quot;); //mit find object zurück geben

cout &lt;&lt; output &lt;&lt; endl;

endhtml();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/197795/gelöst-map-find-liefert-keine-ausgabe</link><generator>RSS for Node</generator><lastBuildDate>Thu, 01 Oct 2026 14:28:22 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/197795.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 14 Nov 2007 20:46:38 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [Gelöst]map find liefert keine ausgabe on Thu, 15 Nov 2007 19:58:56 GMT]]></title><description><![CDATA[<p>Versuche länger schon mit find einen rückgabe wert zu bekommen ohe erfolg. Weiß einfach nicht meht weiter, scheint aber mit der schleife zusammen zuhängen aushalb einer schleife eingeführtes mit insert funktioniert.</p>
<p>cgi.cpp</p>
<pre><code class="language-cpp">#include &lt;iostream&gt; 
#include &lt;string&gt; 
#include &lt;fstream&gt; 
#include &lt;vector&gt;
#include &lt;map&gt;
#include &lt;algorithm&gt;
#include &quot;cgi.h&quot; 

#define CGI

using std::vector;
using namespace std;

/*
The cgi request function to get the cgi query_string 
*/

namespace cgi
{

bool request()
{
	query_string = string();
	char *request = getenv(&quot;REQUEST_METHOD&quot;);
	char *env = getenv(&quot;QUERY_STRING&quot;);
	char *clength = getenv (&quot;CONTENT_LENGTH&quot;);

	if( request == 0 ) 
	{ 
		return false;
	}

		else if(request == std::string(&quot;GET&quot;)) 
		{ 
        		if (env != 0) 
         		{ 
				query_string = env;
				return true;
         		}
		else return false;
		}

		else if(request == std::string(&quot;POST&quot;))
		{

	 		if (clength != 0)
			{
	 			getline(cin, query_string);;
				return true;
			}

		else return false;
		}

	else return false;

}

/*
This function formated the cgi input.
*/

void urlencode() // hole query string pair speicher dieses in einem vector
{
	unsigned int len;
	len = query_string.length();

	for (std::size_t pos = query_string.find(&quot;+&quot;); pos != std::string::npos; pos = query_string.find(&quot;+&quot;, ++pos)) 
        query_string.replace(pos, 1, &quot; &quot;); 

	size_t pos = 0; 
	size_t old_pos = 0; 

	while(len &gt; pos)
		{

                 pos = query_string.find(&quot;&amp;&quot;, old_pos); 

                 if (pos == string::npos) 
                 	pos = query_string.length();

		query_tmp.push_back(query_string.substr(old_pos, pos-old_pos)); //in vector zurückgeben

		old_pos = pos+1; 	
		};

vector&lt;string&gt;::iterator copy;

size_t start = 0;
size_t end = 0;

// im vector wird paar zerlegt umd in einer map zurück gegeben
for(copy = query_tmp.begin(); copy != query_tmp.end(); copy++)
{
	string tmp= *copy;

	start = tmp.find(&quot;=&quot;);
	end = ++start;

	query.insert(QueryPair(tmp.substr(0, --start) ,tmp.substr(end)));
}

}

//get query single ouput
const string getcgidata(string formname)
{

Query::iterator iter;
Query::const_iterator search = query.find(formname);

//ausgabe aller map objecte funktioniert
for( iter = query.begin(); iter != query.end(); ++iter ) { 
     cout &lt;&lt; &quot;Key: '&quot; &lt;&lt; iter-&gt;first &lt;&lt; &quot;', Value: &quot; &lt;&lt; iter-&gt;second &lt;&lt; endl;
	search = query.find(formname); //versuch mit find funtioniert nicht
} 

  	 if(search == query.end())
  	 { 
   	  return &quot;error&quot;; 
  	 } 
	return search-&gt;second;

}

}
</code></pre>
<p>cgi.h</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;map&gt;
#include &lt;algorithm&gt;
#include &lt;vector&gt;

using std::vector;
using namespace std;

namespace cgi
{
std::string query_string;
typedef map&lt;std::string,std::string &gt; Query;
typedef Query::value_type QueryPair;
Query query;

vector&lt;string&gt; query_tmp;

bool request(); //GET CGI DATA

void urlencode(); // parse the CGI query_string

const string getcgidata(string formname); // cgi single ouput

}
</code></pre>
<p>test.cpp</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;c++pwl/html.h&gt;
#include &lt;c++pwl/cgi.h&gt;
#include &lt;map&gt;
#include &lt;vector&gt;

using namespace std;
using namespace cgi;
using namespace html;

int main()
{
starthtml(&quot;TEST1&quot;);

startform(&quot;GET&quot;, &quot;test&quot;);
formselect(&quot;test&quot;,&quot;&lt;option&gt;Moin&lt;/option&gt; &lt;option&gt; Tach &lt;/option&gt; &lt;option&gt; guten tag &lt;/option&gt;&quot;);
formselect(&quot;test1&quot;,&quot;&lt;option&gt;Schuess&lt;/option&gt; &lt;option&gt; Bye &lt;/option&gt; &lt;option&gt; Auf wiedersehen &lt;/option&gt;&quot;);
input(&quot;Schicken&quot;, &quot;submit&quot;);
endform();

request();  //query abholen
urlencode(); //query in map zurückgeben

string output;
output = getcgidata(&quot;test&quot;); //mit find object zurück geben

cout &lt;&lt; output &lt;&lt; endl;

endhtml();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1403367</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1403367</guid><dc:creator><![CDATA[Tuxist]]></dc:creator><pubDate>Thu, 15 Nov 2007 19:58:56 GMT</pubDate></item><item><title><![CDATA[Reply to [Gelöst]map find liefert keine ausgabe on Thu, 15 Nov 2007 11:17:15 GMT]]></title><description><![CDATA[<p>Zuerst einmal solltest du, wenn du groesseres vorhast keine using-direktiven in headern verwenden, da die sich dann auch auf alle Dateien auswirken, die diese header #includen. Ausserdem schreibst du ja eh in 50% der Faelle schon das std:: davor, wenns einheitlich wird ists auch spaeter besser lesbar.</p>
<p>Dann kannst du die if-elses in deiner request() funktion uebersichtlicher gestalten, indem du aus den tausenden returns ein einziges machst und die ganzen verzweigten Bedingungen zusammenfasst:</p>
<pre><code class="language-cpp">bool ret = false;
if(std::string(request) == std::string(&quot;GET&quot;) &amp;&amp; env)
  {
    query_string = env;
    ret = true;
  }
else if(std::string(request) == std::string(&quot;POST&quot;) &amp;&amp; clength)
  {
    getline(cin, query_string);
    ret = true;
  }
return ret;
</code></pre>
<p>Naechster Punkt: werd mit dir selbst einig ob du in urlencode() size_t oder unsigned int nutzen willst.</p>
<p>Dann noch etwas: kapsel das ganze am Besten in einer Klasse. bisher hast du zwar immerhin einen namespace benutzt, aber die Funktionen und Objekte (selbst hilfsobjekte, wenn ich das richtig sehe) fliegen darin lose rum, das kann man besser kapseln.</p>
<p>Was dein problem angeht: Ich habe zwar keinen direkten Fehler finden koennen, aber evtl. spielen da blanks in den strings eine Rolle. Mach mal bei deiner ausgabeschleife jeweils noch einen Test auf gleichheit des Keys mit dem gesuchten key dazu (also find manuell sozusagen), vielleicht gibt das weiter Aufschluss.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1403547</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1403547</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Thu, 15 Nov 2007 11:17:15 GMT</pubDate></item><item><title><![CDATA[Reply to [Gelöst]map find liefert keine ausgabe on Thu, 15 Nov 2007 16:05:01 GMT]]></title><description><![CDATA[<p>Ehm du hattest genau diesem Code vor nen paar Wochen schonmal gepostet ... da hab ich dir den komplett einmal aufgeräumt und &quot;C++-Style&quot; hinzugefügt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /> Von d.h. musst du den Fehler jetzt mal selbst finden ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1403807</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1403807</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Thu, 15 Nov 2007 16:05:01 GMT</pubDate></item><item><title><![CDATA[Reply to [Gelöst]map find liefert keine ausgabe on Thu, 15 Nov 2007 19:32:52 GMT]]></title><description><![CDATA[<p>hab den fehler durch zufall gefunden <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="😃"
    /> <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="😃"
    /><br />
vorher:</p>
<pre><code class="language-cpp">for(copy = query_tmp.begin(); copy != query_tmp.end(); copy++)
{
    string tmp= *copy;

    start = tmp.find(&quot;=&quot;);
    end = ++start;

    query.insert(QueryPair(tmp.substr(0, --start) ,tmp.substr(end)));
}
</code></pre>
<p>nacher:</p>
<pre><code class="language-cpp">for(copy = query_tmp.begin(); copy != query_tmp.end(); copy++)
{
	const string tmp=*copy;

	start = tmp.find(&quot;=&quot;);
	end =++start;

	query.insert(QueryPair(tmp.substr(1, ----start) ,tmp.substr(end)));
}

}
</code></pre>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1403947</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1403947</guid><dc:creator><![CDATA[Tuxist]]></dc:creator><pubDate>Thu, 15 Nov 2007 19:32:52 GMT</pubDate></item></channel></rss>