需要帮助在我的程序中使用“排序”

时间:2011-01-24 01:24:50

标签: c++ data-structures stack

我有一个简单的程序,按优先顺序列出输入,仅检查运算符并按如此排名,“* / + - ”:

#include <iostream>
#include <stack>
#include <string>


using namespace std;

int prec(char op)
{
    if (op == '*' || op == '/') return 0;
    return 1;
}

bool compareprec(char a, char b)
{
    return prec(a) < prec(b);

}

int main()
{
    char input[] = "+-/*";
    cin >> input;
    sort(input, input + 4, &compareprec);
    cout << input;
}

我正在尝试在一个更复杂的程序中实现它,该程序使用堆栈来检查字母数字输入并执行中缀到后缀转换,排名看起来像这样:“9 * 9 + 9”到“9 9 9 * +“。更复杂的计划如下:

#include <iostream>
#include <stack>
#include <string>


using namespace std;

int prec(char op)
{
    if (op == '*' || op == '/' || op == '+' || op == '-') return 0;
    return 1;
}

bool compareprec(char a, char b)
{
    return prec(a) < prec(b);

}

int main()
{
    stack<char> s;
    char input;
    while (cin.get(input) && input != '\n')
        {
            if (isalnum(input))
                cout << input << " ";
            else if (input == '(')
                s.push(input);
            else if (input == ')')
            {
     while (!s.empty() && s.top() != '(')
         {
      cout << s.top() << " ";
      s.pop();
  }
         if(!s.empty()) 
                    s.pop();
         else
                cout << "ERROR: No Matching ( \n";
     }
  else if (s.empty() && input == '*'|| input == '/'|| input == '+'|| input == '-') 
  {
             sort(input, input + 4, &compareprec); // Error Begins Here?
             s.push(input);
  }
         else if (input == '*'||input == '/'||input == '+'|| input =='-')
             while (!s.empty()) 
       {
                  sort(input, input + 4, &compareprec); // More Errors Here?
           cout << s.top() << "\n ";
    s.pop();
                  s.push(input);
       }
        }
    while (!s.empty())
    {
        cout << s.top() << " ";
        s.pop();
    }
}

但我一直收到错误消息:

error: no matching function for call to 'sort(char&, int, bool (*)(char, char))'
error: no matching function for call to 'sort(char&, int, bool (*)(char, char))'

我不确定为什么。我知道这可能是一些非常明显/愚蠢的事情,但我无法弄明白。任何帮助,将不胜感激。提前谢谢!

2 个答案:

答案 0 :(得分:3)

sort期望可以迭代的东西。

您的工作示例

 char input[]

(char数组)

您的非工作示例删除了数组语法并使其成为纯字符

 char input

当您尝试执行此操作时:

 sort(input, input + 4, &compareprec)

在工作的情况下,因为你提供了一个数组,所以你要告诉它从输入的开头迭代到该位置之后的4。在非工作的情况下,你告诉它从说'a'到'd'(这是'a'+ 4)。

答案 1 :(得分:1)

为什么你要在第二个例子中对任何东西进行排序?您最多需要比较两个运算符,一个位于堆栈顶部,另一个位于输入中。只需使用您的compareprec - 函数,并根据结果采取相应措施。

顺便说一句,为了使你的代码更漂亮,创建一个函数:

 bool is_operator(char s);

几乎忘了告诉你,第二个例子中int prec(char a)的版本是错误的,使用第一个版本。