#include<cstdio> #include<cstdlib> #include<string> #include<cstring> using namespace std; int stack[101]; char s[256]; int comp( char s[256]) { int i=0, top=0, x, y; while (i<=strlen(s)-2) { switch (s[i]) { case '+':stack[--top]+=stack[top+1];break; case '-':stack[--top]-=stack[top+1];break; case '*':stack[--top]*=stack[top+1];break; case '/':stack[--top]/=stack[top+1];break; default:x=0;while (s[i]!=' ') x=x*10+s[i++]-'0'; stack[++top]=x;break; } i++ } return stack [top] } main { printf("input a string(@_over):"); gets(s); printf("result=%d",comp(s)); return 0; }
时间: 2024-04-17 21:26:02 浏览: 153
在您提供的代码中,存在一些语法错误和逻辑问题。以下是对您的代码进行修正的建议:
1. 在 `comp()` 函数中,`i` 和 `top` 的初始值应该为 0,而不是 1。因此,将 `int i = 0, top = 0, x, y;` 修改为 `int i = 0, top = 0, x, y;`。
2. 在 `comp()` 函数中,`while` 循环条件应该是 `i < strlen(s)`,而不是 `i <= strlen(s) - 2`。这是因为 `strlen(s)` 返回字符串 `s` 中字符的实际长度,而不是字符串末尾的空字符位置。因此,将 `while (i <= strlen(s) - 2)` 修改为 `while (i < strlen(s))`。
3. 在 `comp()` 函数中,`switch` 语句中缺少了一些必要的语句结尾的分号。因此,将 `stack[--top]+=stack[top+1];`、`stack[--top]-=stack[top+1];`、`stack[--top]*=stack[top+1];` 和 `stack[--top]/=stack[top+1];` 修改为 `stack[--top]+=stack[top+1]; break;`、`stack[--top]-=stack[top+1]; break;`、`stack[--top]*=stack[top+1]; break;` 和 `stack[--top]/=stack[top+1]; break;`。
4. 在 `comp()` 函数中,`default` 分支缺少了结束循环的 `break` 语句。因此,将 `stack[++top]=x;` 修改为 `stack[++top]=x; break;`。
5. 在 `main()` 函数中,`comp(s)` 的调用应该放在 `printf()` 函数中,以便正确输出结果。因此,将 `printf("result=%d",comp(s));` 修改为 `printf("result=%d\n", comp(s));`。
6. 在 `main()` 函数中,使用 `gets(s)` 读取输入字符串是不安全的,因为它无法防止缓冲区溢出。建议使用 `fgets(s, sizeof(s), stdin)` 来安全地读取输入字符串。因此,将 `gets(s);` 修改为 `fgets(s, sizeof(s), stdin);`。
下面是修正后的代码示例:
```cpp
#include<cstdio>
#include<cstdlib>
#include<string>
#include<cstring>
using namespace std;
int stack[101];
char s[256];
int comp(char s[256]) {
int i = 0, top = 0, x, y;
while (i < strlen(s)) {
switch (s[i]) {
case '+':
stack[--top] += stack[top + 1];
break;
case '-':
stack[--top] -= stack[top + 1];
break;
case '*':
stack[--top] *= stack[top + 1];
break;
case '/':
stack[--top] /= stack[top + 1];
break;
default:
x = 0;
while (s[i] != ' ')
x = x * 10 + s[i++] - '0';
stack[++top] = x;
break;
}
i++;
}
return stack[top];
}
int main() {
printf("input a string(@_over): ");
fgets(s, sizeof(s), stdin);
printf("result = %d\n", comp(s));
return 0;
}
```
请注意,上述修改仅涉及您提供的代码片段,并且仅解决了明显的问题。如果您还有其他需求或问题,请随时提问。
阅读全文