所以这里我有一个代码用于中缀转换后缀。我们的想法是发送一个包含中缀公式的字符串,并返回该公式的后缀表示法。如果操作为+ - * / () [] {}
或tezinaOperacije()
,则操作符为+
,函数-
返回1;如果操作为*
或/
,则返回2。否则它返回-1。当您在打开的括号上调用它时,函数zatvorenaZagrada()
将返回右侧的闭括号。问题是函数返回一个空字符串。有人可以帮忙吗?
string infixToPostfix(string& str){
stack<char> stek;
string s="";
for(int i=0; i<str.size(); i++){
s+=s[i];
}
char pre='(';
string copy="";
for(int i=0; i<s.size(); i++){
if(s[i]>='0' && s[i]<='9'){
if(pre==')' || prei==']' || pre=='}' || pre=='0') throw "wrong";
char number=s[i];
copy+=number;
pre=='0';
}
else if(s[i]=='(' || s[i]=='[' || s[i]=='{'){
if(pre=='0' || pre==')') throw "Wrong";
char sign=s[i];
stek.push(sign);
pre=sign;
}
else if(s[i]==')' || s[i]==']' || s[i]=='}'){
char sign=s[i];
while(!stek.empty() && tezinaOperacije(stek.top())>0){
copy+=stek.top();
stek.pop();
}
if(stek.empty() || sign !=ZatvorenaZagrada(stek.top())) throw "wrong declaration";
stek.pop();
pre=sign;
}
else if(tezinaOperacije(s[i])>0){
char sign=s[i];
if(tezinaOperacije(pre)>0 || pre=='(' || pre=='[' || pre=='{') throw "wrong";
while(!stek.empty() && tezinaOperacije(stek.top())>=tezinaOperacije(sign)){
copy+=stek.top();
stek.pop();
}
stek.push(sign);
pre=sign;
}
}
while(!stek.empty()){
copy+=stek.top();
stek.pop();
}
return copy;
}
答案 0 :(得分:0)
用
string s="";
for(int i=0; i<str.size(); i++){
s+=s[i];
//---------^ s?
}
您获得s
满零('\0'
)
我想你的意图是
string s="";
for(int i=0; i<str.size(); i++){
s+=str[i];
//---------^^^
}
s
满零,以下for
for(int i=0; i<s.size(); i++){
if(s[i]>='0' && s[i]<='9'){
// ...
}
else if(s[i]=='(' || s[i]=='[' || s[i]=='{'){
// ...
}
else if(s[i]==')' || s[i]==']' || s[i]=='}'){
// ...
}
else if(tezinaOperacije(s[i])>0){
// ...
}
}
没有任何用处,copy
仍为空。