我試圖用包含在隊列中的運算符和操作數來構建數學表達式(包括括號)。如何從運算符和隊列中的操作數創建數學表達式
這裏是我的代碼:
string createExp (queue<char> q) {
string s;
string s1, s2;
char c;
while (!q.empty()) {
c = q.front();
if (c == 'x') {
s += "x";
q.pop();
}
else if (c == 'y') {
s += "y";
q.pop();
}
else if (c == 'a') {
s += "avg(";
q.pop();
s1 = createExp(q);
q.pop();
s2 = createExp(q);
q.pop();
s += s1;
s += ',';
s += s2;
s += ')';
}
else if (c == 's') {
s += "sin(pi*";
q.pop();
op++;
}
else if (c == 'c') {
s += "cos(pi*";
q.pop();
op++;
}
else {
s += "*";
q.pop();
}
}
while (op > cp) {
s += ")";
cp++;
}
return (s);
}
正如你所看到的,在平均(AVG)的情況下,我想遞歸調用該函數獲取值的下一序列。
例如,如果我的隊列包含下一個值:
smayxy
表達應該是這樣的:
SIN(PI *(AVG(Y, x)* y)
但我的代碼返回這個序列:
罪(PI ** AVG(YYX)yyxyyx
你能幫我嗎?
非常感謝。
您是否嘗試過調試一步一步? – sop
或者至少使用更短/更簡單的輸入? –
你的'op'和'cp'定義在哪裏?他們是全球嗎? – sop