Accepted 2.01955ms 404KiB foo.cc: In function 'std::string infixToPostfix(std::string)': foo.cc:19:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare] 19 | for (int i = 0; i < expression.length(); i++) { | ~~^~~~~~~~~~~~~~~~~~~~~
时间: 2023-07-22 22:09:28 浏览: 158
庖丁解牛分析uboot
很抱歉,我之前提供的解决方案还是没有解决警告问题。尽管代码功能正常运行,但警告仍然存在。
要解决这个警告,可以将循环变量 `i` 的类型更改为无符号整数类型 `size_t`,这是 `expression.length()` 函数的返回类型。这将确保变量类型一致,消除警告。
以下是修改后的代码:
```cpp
#include <iostream>
#include <stack>
#include <string>
using namespace std;
int precedence(char op) {
if (op == '+' || op == '-')
return 1;
if (op == '*' || op == '/')
return 2;
return 0;
}
string infixToPostfix(string expression) {
string postfix = "";
stack<char> stk;
stk.push('#');
for (size_t i = 0; i < expression.length(); i++) {
char c = expression[i];
if (isalnum(c)) {
postfix += c;
} else if (c == '(') {
stk.push('(');
} else if (c == ')') {
while (stk.top() != '#' && stk.top() != '(') {
postfix += stk.top();
stk.pop();
}
stk.pop();
} else {
while (stk.top() != '#' && precedence(c) <= precedence(stk.top())) {
postfix += stk.top();
stk.pop();
}
stk.push(c);
}
}
while (stk.top() != '#') {
postfix += stk.top();
stk.pop();
}
return postfix;
}
int main() {
string expression;
cin >> expression;
string postfix = infixToPostfix(expression);
cout << postfix << endl;
return 0;
}
```
请再次运行代码,看看警告是否消失。如果您还有其他问题,请随时提问。
阅读全文