我正在编写一段代码来评估前缀表达式。表达式的值用空格分隔。因此,如果输入是"+*"8789666〃;,我应该得到8409作为答案。我的代码的概念是将值存储到一个数组中,然后逐值计算。现在我被困在开关部分,因为编译器说从char到const char*的转换无效
#include <iostream>
#include <bits/stdc++.h>
#include <algorithm>
#include <stack>
#include <string>
#include <sstream>
using namespace std;
char n[99999][6]={};
int evaluatePrefix(int l)
{
stack<int> Stack;
for (int j = l; j >= 0; j--) {
string x=n[j];
if (n[j][0]!='+' || n[j][0]!='-' || n[j][0]!='*' || n[j][0]!='/'){
stringstream ss;
int a;
ss<<x;
ss>>a;
Stack.push(a);
}
else {
int o1 = Stack.top();
Stack.pop();
int o2 = Stack.top();
Stack.pop();
if (strcmp(n[j], '+')==0){
Stack.push(o1 + o2);
}
else if (strcmp(x, '-')==0){
Stack.push(o1 - o2);
}
else if (strcmp(x, '*')==0){
Stack.push(o1 * o2);
}
else if (strcmp(x, '/')==0){
Stack.push(o1 / o2);
}
}
}
return Stack.top();
}
int main()
{
char e[99999], w[99999];
int i=0;
scanf("%[^n]%*c",e);
char *token = strtok(e, " ");
while (token != NULL)
{
strcpy(n[i], token);
token = strtok(NULL, " ");
}
return 0;
}
您写道:
if (strcmp(n[j], '+')==0)
n[j]
衰变为char*
,但'+'
是单个char
,而不是char*
。strcmp
需要两个字符指针。
https://en.cppreference.com/w/c/string/byte/strcmp
所以,你应该使用:
if (strcmp(n[j], "+")==0)