<?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[Brauche Hilfe]]></title><description><![CDATA[<p>Guten Tach<br />
Bin noch neu hier, wenn ich falsch gepostet hab bitte flamen.<br />
Bin grad dabei einen Taschenrechner zu schreiben. Man gibt den kompletten Term ein, der wird dann in Zahlen und Rechenoperatoren zerlegt (ich speicher den zerlegten Term in einem String-Vector) und dann brechnet. Der kann soweit +-*/ und Potenzen (kann auch Potenz vor Punkt vor Strich und mit den Potenzen kann man sogar Wurzeln berechnen).<br />
Nun mein Problem: Ich möchte nun Klammern einfügen, doch ich bekomm dann immer die Fehlermeldung &quot;Expression: vector suscript out of range&quot;. Ich konnte den Fehler bissher nicht finden. Ich geb immer als Beispiel (2+3)*4 ein (was dann 24 geben sollte).Hier ist mal der ganze Code:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;vector&gt;
#include &quot;math.h&quot;
#include &lt;sstream&gt;

using namespace std;

vector&lt;string&gt; pushback_empty(vector&lt;string&gt; str);
string calc(string term);
string calc1(string term);
string dbltostr(double i);
double strtodbl(string str);

const double pi=3.1415926536;

int main()
{
START:
	string term;
	while(term.empty())
		cin&gt;&gt;term;
	cout&lt;&lt;&quot;=&quot;&lt;&lt;calc(term)&lt;&lt;endl
		&lt;&lt;&quot;________________________________________________________________________________\n&quot;;
	goto START;
}

string calc(string term)
{
	vector&lt;string&gt;::size_type size=0;
	for(string::size_type ix=0;ix!=term.size();++ix){
		if(ix!=0){
			if(term[ix]=='+'||term[ix]=='*'||term[ix]=='/'||term[ix]=='^'||term[ix]=='-'&amp;&amp;isdigit(term[ix-1]))
				size+=2;
		}
		if(term[ix]=='('||term[ix]==')')
			++size;
	}
	vector&lt;string&gt; str(++size);
	vector&lt;string&gt;::size_type iy=0;
	for(string::size_type ix=0;ix!=term.size();++ix){
		if(ix==0&amp;&amp;term[0]=='('){
			str[0]=term[0];
			++iy;
		}
		if(term[ix]=='('||term[ix]==')'){
				str[iy+1]=term[ix];
				iy+=2;
		}
		if(ix!=0){
			if(term[ix]=='+'||term[ix]=='*'||term[ix]=='/'||term[ix]=='^'||term[ix]=='-'&amp;&amp;isdigit(term[ix-1])){
				str[iy+1]=term[ix];
				iy+=2;
			}
			if(ix==1&amp;&amp;term[0]!='(')
				str[0]=term[0];
			if(isdigit(term[ix])||term[ix]=='.'||term[ix]=='-'&amp;&amp;!isdigit(term[ix-1]))
				str[iy]+=term[ix];
		}
	}
	size=0;
	for(vector&lt;string&gt;::size_type ix=0;ix!=str.size();++ix){
		if(str[ix]==&quot;(&quot;)
			++size;
	}
	for(vector&lt;string&gt;::size_type ix1=0;ix1!=size;++ix1){
		iy=0;
		vector&lt;string&gt;::size_type iz=0;
		for(vector&lt;string&gt;::size_type ix=0;ix!=str.size();++ix){
			if(str[ix]==&quot;(&quot;)
				iy=ix;
			if(str[ix]==&quot;)&quot;&amp;&amp;!ix)
				iz=ix;
		}
		str[iy]=&quot;&quot;;
		str[iz]=&quot;&quot;;
		string temp=&quot;&quot;;
		for(vector&lt;string&gt;::size_type ix=++iy;ix!=iz;++ix){
			temp+=str[ix];
			str[ix]=&quot;&quot;;
		}
		str[iy-1]=calc1(temp);
		str=pushback_empty(str);
	}
	return string(calc1(term));
}

string calc1(string term)
{
	vector&lt;string&gt;::size_type size=0;
	for(string::size_type ix=0;ix!=term.size();++ix){
		if(ix!=0){
			if(term[ix]=='+'||term[ix]=='*'||term[ix]=='/'||term[ix]=='^'||term[ix]=='-'&amp;&amp;isdigit(term[ix-1]))
				size+=2;
		}
	}
	vector&lt;string&gt; str(++size);
	vector&lt;string&gt;::size_type iy=0;
	for(string::size_type ix=0;ix!=term.size();++ix){
		if(ix!=0){
			if(term[ix]=='+'||term[ix]=='*'||term[ix]=='/'||term[ix]=='^'||term[ix]=='-'&amp;&amp;isdigit(term[ix-1])){
				str[iy+1]=term[ix];
				iy+=2;
			}
			if(ix==1)
				str[0]=term[0];
			if(isdigit(term[ix])||term[ix]=='.'||term[ix]=='-'&amp;&amp;!isdigit(term[ix-1]))
				str[iy]+=term[ix];
		}
	}
	for(vector&lt;string&gt;::size_type ix=0;ix!=str.size();++ix){
		if(str[ix]==&quot;^&quot;){
			str[ix]=dbltostr(pow(strtodbl(str[ix-1]),strtodbl(str[ix+1])));
			str[ix-1]=&quot;&quot;;
			str[ix+1]=&quot;&quot;;
		}
	}
	for(vector&lt;string&gt;::size_type ix=0;ix!=str.size();++ix){
		if(str[ix]==&quot;*&quot;){
			str[ix]=dbltostr(strtodbl(str[ix-1])*strtodbl(str[ix+1]));
			str[ix-1]=&quot;&quot;;
			str[ix+1]=&quot;&quot;;
		}
		if(str[ix]==&quot;/&quot;){
			str[ix]=dbltostr(strtodbl(str[ix-1])/strtodbl(str[ix+1]));
			str[ix-1]=&quot;&quot;;
			str[ix+1]=&quot;&quot;;
		}
		str=pushback_empty(str);
	}
	for(vector&lt;string&gt;::size_type ix=0;ix!=str.size();++ix){
		if(str[ix]==&quot;+&quot;){
			str[ix]=dbltostr(strtodbl(str[ix-1])+strtodbl(str[ix+1]));
			str[ix-1]=&quot;&quot;;
			str[ix+1]=&quot;&quot;;
		}
		if(str[ix]==&quot;-&quot;){
			str[ix]=dbltostr(strtodbl(str[ix-1])-strtodbl(str[ix+1]));
			str[ix-1]=&quot;&quot;;
			str[ix+1]=&quot;&quot;;
		}
		str=pushback_empty(str);
	}
	string res;
	for(vector&lt;string&gt;::size_type ix=0;ix!=str.size();++ix)
		if(str[ix]!=&quot;&quot;)
			res=str[ix];
	return string(res);
}

vector&lt;string&gt; pushback_empty(vector&lt;string&gt; str)
{
	for(vector&lt;string&gt;::size_type ix=0;ix!=str.size();++ix){
		if(str[ix].empty()){
			for(vector&lt;string&gt;::size_type iy=ix;iy!=str.size()-1;++iy)
				str[iy]=str[iy+1];
			str[str.size()-1]=&quot;&quot;;
		}
	}
	return str;
}

string dbltostr(double i)
{
    ostringstream Str;
	Str&lt;&lt;i;
	return string(Str.str());
}

double strtodbl(string str)
{
    stringstream Str(str);
	double i;
	Str&gt;&gt;i;
	return i;
}
</code></pre>
<p>Fänd's schön wenn ihr mir helfen könntet. (Falls es relevant ist, wovon ich nicht ausgehe, ich benutze Visual Studio 2008 Professional)</p>
<p>mfg MaSter_MiND_</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/254447/brauche-hilfe</link><generator>RSS for Node</generator><lastBuildDate>Sun, 13 Sep 2026 00:08:49 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/254447.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 16 Nov 2009 17:59:56 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Brauche Hilfe on Mon, 16 Nov 2009 17:59:56 GMT]]></title><description><![CDATA[<p>Guten Tach<br />
Bin noch neu hier, wenn ich falsch gepostet hab bitte flamen.<br />
Bin grad dabei einen Taschenrechner zu schreiben. Man gibt den kompletten Term ein, der wird dann in Zahlen und Rechenoperatoren zerlegt (ich speicher den zerlegten Term in einem String-Vector) und dann brechnet. Der kann soweit +-*/ und Potenzen (kann auch Potenz vor Punkt vor Strich und mit den Potenzen kann man sogar Wurzeln berechnen).<br />
Nun mein Problem: Ich möchte nun Klammern einfügen, doch ich bekomm dann immer die Fehlermeldung &quot;Expression: vector suscript out of range&quot;. Ich konnte den Fehler bissher nicht finden. Ich geb immer als Beispiel (2+3)*4 ein (was dann 24 geben sollte).Hier ist mal der ganze Code:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;vector&gt;
#include &quot;math.h&quot;
#include &lt;sstream&gt;

using namespace std;

vector&lt;string&gt; pushback_empty(vector&lt;string&gt; str);
string calc(string term);
string calc1(string term);
string dbltostr(double i);
double strtodbl(string str);

const double pi=3.1415926536;

int main()
{
START:
	string term;
	while(term.empty())
		cin&gt;&gt;term;
	cout&lt;&lt;&quot;=&quot;&lt;&lt;calc(term)&lt;&lt;endl
		&lt;&lt;&quot;________________________________________________________________________________\n&quot;;
	goto START;
}

string calc(string term)
{
	vector&lt;string&gt;::size_type size=0;
	for(string::size_type ix=0;ix!=term.size();++ix){
		if(ix!=0){
			if(term[ix]=='+'||term[ix]=='*'||term[ix]=='/'||term[ix]=='^'||term[ix]=='-'&amp;&amp;isdigit(term[ix-1]))
				size+=2;
		}
		if(term[ix]=='('||term[ix]==')')
			++size;
	}
	vector&lt;string&gt; str(++size);
	vector&lt;string&gt;::size_type iy=0;
	for(string::size_type ix=0;ix!=term.size();++ix){
		if(ix==0&amp;&amp;term[0]=='('){
			str[0]=term[0];
			++iy;
		}
		if(term[ix]=='('||term[ix]==')'){
				str[iy+1]=term[ix];
				iy+=2;
		}
		if(ix!=0){
			if(term[ix]=='+'||term[ix]=='*'||term[ix]=='/'||term[ix]=='^'||term[ix]=='-'&amp;&amp;isdigit(term[ix-1])){
				str[iy+1]=term[ix];
				iy+=2;
			}
			if(ix==1&amp;&amp;term[0]!='(')
				str[0]=term[0];
			if(isdigit(term[ix])||term[ix]=='.'||term[ix]=='-'&amp;&amp;!isdigit(term[ix-1]))
				str[iy]+=term[ix];
		}
	}
	size=0;
	for(vector&lt;string&gt;::size_type ix=0;ix!=str.size();++ix){
		if(str[ix]==&quot;(&quot;)
			++size;
	}
	for(vector&lt;string&gt;::size_type ix1=0;ix1!=size;++ix1){
		iy=0;
		vector&lt;string&gt;::size_type iz=0;
		for(vector&lt;string&gt;::size_type ix=0;ix!=str.size();++ix){
			if(str[ix]==&quot;(&quot;)
				iy=ix;
			if(str[ix]==&quot;)&quot;&amp;&amp;!ix)
				iz=ix;
		}
		str[iy]=&quot;&quot;;
		str[iz]=&quot;&quot;;
		string temp=&quot;&quot;;
		for(vector&lt;string&gt;::size_type ix=++iy;ix!=iz;++ix){
			temp+=str[ix];
			str[ix]=&quot;&quot;;
		}
		str[iy-1]=calc1(temp);
		str=pushback_empty(str);
	}
	return string(calc1(term));
}

string calc1(string term)
{
	vector&lt;string&gt;::size_type size=0;
	for(string::size_type ix=0;ix!=term.size();++ix){
		if(ix!=0){
			if(term[ix]=='+'||term[ix]=='*'||term[ix]=='/'||term[ix]=='^'||term[ix]=='-'&amp;&amp;isdigit(term[ix-1]))
				size+=2;
		}
	}
	vector&lt;string&gt; str(++size);
	vector&lt;string&gt;::size_type iy=0;
	for(string::size_type ix=0;ix!=term.size();++ix){
		if(ix!=0){
			if(term[ix]=='+'||term[ix]=='*'||term[ix]=='/'||term[ix]=='^'||term[ix]=='-'&amp;&amp;isdigit(term[ix-1])){
				str[iy+1]=term[ix];
				iy+=2;
			}
			if(ix==1)
				str[0]=term[0];
			if(isdigit(term[ix])||term[ix]=='.'||term[ix]=='-'&amp;&amp;!isdigit(term[ix-1]))
				str[iy]+=term[ix];
		}
	}
	for(vector&lt;string&gt;::size_type ix=0;ix!=str.size();++ix){
		if(str[ix]==&quot;^&quot;){
			str[ix]=dbltostr(pow(strtodbl(str[ix-1]),strtodbl(str[ix+1])));
			str[ix-1]=&quot;&quot;;
			str[ix+1]=&quot;&quot;;
		}
	}
	for(vector&lt;string&gt;::size_type ix=0;ix!=str.size();++ix){
		if(str[ix]==&quot;*&quot;){
			str[ix]=dbltostr(strtodbl(str[ix-1])*strtodbl(str[ix+1]));
			str[ix-1]=&quot;&quot;;
			str[ix+1]=&quot;&quot;;
		}
		if(str[ix]==&quot;/&quot;){
			str[ix]=dbltostr(strtodbl(str[ix-1])/strtodbl(str[ix+1]));
			str[ix-1]=&quot;&quot;;
			str[ix+1]=&quot;&quot;;
		}
		str=pushback_empty(str);
	}
	for(vector&lt;string&gt;::size_type ix=0;ix!=str.size();++ix){
		if(str[ix]==&quot;+&quot;){
			str[ix]=dbltostr(strtodbl(str[ix-1])+strtodbl(str[ix+1]));
			str[ix-1]=&quot;&quot;;
			str[ix+1]=&quot;&quot;;
		}
		if(str[ix]==&quot;-&quot;){
			str[ix]=dbltostr(strtodbl(str[ix-1])-strtodbl(str[ix+1]));
			str[ix-1]=&quot;&quot;;
			str[ix+1]=&quot;&quot;;
		}
		str=pushback_empty(str);
	}
	string res;
	for(vector&lt;string&gt;::size_type ix=0;ix!=str.size();++ix)
		if(str[ix]!=&quot;&quot;)
			res=str[ix];
	return string(res);
}

vector&lt;string&gt; pushback_empty(vector&lt;string&gt; str)
{
	for(vector&lt;string&gt;::size_type ix=0;ix!=str.size();++ix){
		if(str[ix].empty()){
			for(vector&lt;string&gt;::size_type iy=ix;iy!=str.size()-1;++iy)
				str[iy]=str[iy+1];
			str[str.size()-1]=&quot;&quot;;
		}
	}
	return str;
}

string dbltostr(double i)
{
    ostringstream Str;
	Str&lt;&lt;i;
	return string(Str.str());
}

double strtodbl(string str)
{
    stringstream Str(str);
	double i;
	Str&gt;&gt;i;
	return i;
}
</code></pre>
<p>Fänd's schön wenn ihr mir helfen könntet. (Falls es relevant ist, wovon ich nicht ausgehe, ich benutze Visual Studio 2008 Professional)</p>
<p>mfg MaSter_MiND_</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1808951</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1808951</guid><dc:creator><![CDATA[MaSter_MiND_]]></dc:creator><pubDate>Mon, 16 Nov 2009 17:59:56 GMT</pubDate></item><item><title><![CDATA[Reply to Brauche Hilfe on Mon, 16 Nov 2009 18:16:56 GMT]]></title><description><![CDATA[<p>nutz den debugger und benutz hier die cpp-tags anstatt der code-tags</p>
<p><code>#include &quot;math.h&quot;</code> -&gt; <code>#include &lt;cmath&gt;</code></p>
<pre><code class="language-cpp">int main()
{
START:

    goto START;
}
</code></pre>
<p>nimm halt ne endlosschleife...</p>
<pre><code class="language-cpp">string(Str.str());
</code></pre>
<p>sieht ein wenig sinnlos aus:<br />
<a href="http://www.cplusplus.com/reference/iostream/ostringstream/str/" rel="nofollow">http://www.cplusplus.com/reference/iostream/ostringstream/str/</a><br />
gibt also scho nen string zurück...</p>
<p>deinen eigtl. fehler seh ich auf anhieb aber nicht - aber guck halt ma mit dem debugger durch...</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1808961</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1808961</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Mon, 16 Nov 2009 18:16:56 GMT</pubDate></item></channel></rss>