难点:

  1. 如何判断一个字符是否为运算符?
  2. 如何确定两个运算符的优先级?
  3. 如何进行运算符的入栈和出栈操作?
  4. 如何将输入的字符串转化为数字进行运算?
  5. 如何处理多位数的情况?
  6. 如何处理括号的情况?

解决方法:

  1. 可以定义一个函数IsOperator(char c)来判断一个字符是否为运算符。在该函数中,遍历操作符集合,如果字符与集合中的任意一个字符相等,则返回1,表示是运算符,否则返回0,表示不是运算符。
  2. 可以定义一个二维数组Prior来表示两个运算符的优先级。在函数Priority(char c1, char c2)中,根据运算符c1和c2在OperaterSet中的位置,通过Prior数组来确定它们的优先级。
  3. 可以使用两个栈来实现运算符的入栈和出栈操作。一个栈用于存储运算符(OPTR),另一个栈用于存储操作数(OPND)。在遍历输入字符串时,根据运算符的优先级进行入栈和出栈操作。
  4. 可以使用atof函数将字符串转化为浮点数进行运算。在遍历输入字符串时,遇到数字字符时,将其加入一个临时字符串tmp中,直到遇到下一个运算符字符。然后使用atof函数将tmp转化为浮点数,并将其入栈。
  5. 可以在遍历输入字符串时,使用一个临时字符串tmp来存储数字字符。当遇到运算符字符时,将tmp转化为浮点数,并将其入栈。然后将tmp清空,准备下一个数字字符的存储。
  6. 在遍历输入字符串时,遇到左括号时,将其入栈。遇到右括号时,将栈顶的运算符出栈,直到遇到左括号为止。然后将左括号和右括号都丢弃,继续处理下一个字符

原文地址: http://www.cveoy.top/t/topic/iSIA 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录