有没有人可以看看这个函数

逻辑表达式一般是这个格式的
2635|H|{}|1|2905=1,290=0,(2901=1+2902=1)!
分析这一段:2905=1,290=0,(2901=1+2902=1)
这里逗号表示and,加号表示or
2905=1 表示2905刀闸设备在合位
290=0 表示290开关在分位
2901=1 表示2901开关在合位
2902=1表示2902刀闸在合位
整个句子表示合2635刀闸时,要判断 2905在合位,且290在分位, 且2901或2902至少有一个在合位
AB(C+D)
现在罗工在工程中有一个需求:当一个设备被删除时,在逻辑表达式中对应的设备编号要被删除掉,而又要保持逻辑表达式的合法性。
比方
A+BC 当B被删除时,表达式变成 A+C
(A+B)C 当B被删除时,表达式变成AC
请你完成这个函数的实现。
为了简单起见,在这个函数里,我们只使用+和
两种算符,没有上述的等号,被删除的直接就是运算数/变量, 比方前面的B
//src 原表达式
//set2Del 将要被删除的设备清单
/dst 完成删除处理后的合法表达式
void delExp(const string& src, set& set2Del, string& dst );
编辑工具:QT console application的形式
语言:c++

望采纳

void delExp(const string& src, set& set2Del, string& dst)
{
  stack stk; // 用来处理表达式的栈

  // 从左到右扫描表达式
  for (int i = 0; i < src.length(); i++)
  {
    if (src[i] == '+') // 如果遇到运算符
    {
      // 弹出栈顶的两个元素
      string op1 = stk.top();
      stk.pop();
      string op2 = stk.top();
      stk.pop();

      // 根据运算符和运算数进行运算,并将结果压入栈中
      string result = op1 + "+" + op2;
      stk.push(result);
    }
    else if (src[i] == '*') // 如果遇到运算符
    {
      // 弹出栈顶的两个元素
      string op1 = stk.top();
      stk.pop();
      string op2 = stk.top();
      stk.pop();

      // 根据运算符和运算数进行运算,并将结果压入栈中
      string result = op1 + "*" + op2;
      stk.push(result);
    }
    else if (!set2Del.contains(src[i])) // 如果遇到的是变量,且不在被删除的列表中
    {
      // 将变量压入栈中
      string var = src[i];
      stk.push(var);
    }
  }

  // 将栈顶元素返回,即为处理完删除操作后的表达式
  dst = stk.top();
}