Я пытаюсь построить математическое выражение (включая скобки) с операторами и операндами, включенными в очередь.
Вот мой код:
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) я пытаюсь рекурсивно вызвать функцию, чтобы получить следующую последовательность значений.
Например, если моя очередь содержит следующие значения:
s m a y x y
Выражение должно быть таким:
грех (пи * (ср (у, х) * у)
Но мой код возвращает эту последовательность:
sin (pi ** avg (yyx) yyxyyx
Не могли бы вы мне с этим помочь?
Большое тебе спасибо.
op
иcp
? Они глобальные? - person sop   schedule 17.12.2015