请帮我看一下,这个问题的代码错误在哪个地方,下面是问题:为了简化问题,每组数据里面只包含加减乘三种运算,所有数字都是10以内的自然数,第一行包含一个整数N,表示有N组测试数据。 为了简化问题,每组数据里面只包含加减乘三种运算,所有数字都是10以内的自然数#include<stdio.h> #include<map> #include<string.h> #include<stack> using namespace std; map<char,int> p; stack<int> num; stack<char> op; int len; char str[100]; void calculate() { int i,n,n1,n2,t; char ch; for(i = 0 ; i < len;i++){ if(str[i]>='0' && str[i]<='9'){ n = str[i] - '0'; num.push(n); }//数字栈输入数字 else{ while(!op.empty() && p[op.top()]>=p[str[i]]){ ch = op.top(); op.pop(); n1 = num.top(); num.pop(); n2 = num.top(); num.pop(); if(ch==''){ t = n1n2; } else if(ch == '+'){ t = n1 + n2; } else{ t = n1-n2; } num.push(t); } op.push(str[i]); } } } int main() { int N; scanf("%d",&N); while(N--){ scanf("%s",str); //len = strlen(str); printf("%d\n",len); calculate(); printf("%d\n",num.top()); while(num.empty()){ num.pop(); } while(op.empty()){ op.pop(); } } }
时间: 2023-12-05 21:03:13 浏览: 70
这个问题的代码错误在 calculate() 函数中,具体来说是在以下代码段:
```c++
if(ch==''){ t = n1n2; }
```
这里应该使用乘法符号 `*`,而不是空字符 `''`。应该修改为:
```c++
if(ch=='*'){ t = n1 * n2; }
```
此外,还需要对输入进行一些处理,例如将 map 初始化、清空栈等。下面是修改后的代码:
```c++
#include <stdio.h>
#include <map>
#include <string.h>
#include <stack>
using namespace std;
map<char,int> p;
stack<int> num;
stack<char> op;
int len;
char str[100];
void calculate() {
int i, n, n1, n2, t;
char ch;
for(i = 0 ; i < len;i++){
if(str[i]>='0' && str[i]<='9'){
n = str[i] - '0';
num.push(n); //数字栈输入数字
}
else{
while(!op.empty() && p[op.top()]>=p[str[i]]){
ch = op.top();
op.pop();
n1 = num.top();
num.pop();
n2 = num.top();
num.pop();
if(ch=='*'){
t = n1 * n2;
}
else if(ch == '+'){
t = n1 + n2;
}
else{
t = n1-n2;
}
num.push(t);
}
op.push(str[i]);
}
}
while(!op.empty()){
ch = op.top();
op.pop();
n1 = num.top();
num.pop();
n2 = num.top();
num.pop();
if(ch=='*'){
t = n1 * n2;
}
else if(ch == '+'){
t = n1 + n2;
}
else{
t = n1-n2;
}
num.push(t);
}
}
int main() {
int N;
scanf("%d",&N);
p['+'] = 1;
p['-'] = 1;
p['*'] = 2;
while(N--){
scanf("%s",str);
len = strlen(str);
calculate();
printf("%d\n",num.top());
num.pop();
op.pop();
}
return 0;
}
```
注意:还应该对输入的字符串进行处理,如去掉空格等无用字符。
阅读全文