在抛出'std :: out_of_range'的实例后调用终止what():basic_string :: at

时间:2015-05-30 12:47:38

标签: c++

    使用namespace std;

if(isset($_POST['submit']))
                        { 

                            echo 'Would you like a hamburger 2';

                            <p>

                                <input type = 'radio' name = 'hamburger' value "yes">yes <p>
                                <input type = 'radio' name = 'hamburger 'value "no"> no<p>
                            </p>

                            <p><input type="submit"  value="submitform2" name ="submitform2" /></p> 
                            <?php
                           }

                        if(isset($_POST["submitform2"]))
                        {
                            $hamburger = $_POST['hamburger'];

                            if($hamburger == 'yes')
                            {
                            }
                                ?>
                                <p><input type="submit"  value="submitThirdForm" name ="submitThirdForm" /></p>

                                <?php
                            }

我是编程新手。我正在使用中缀转换后缀但遇到错误:

class stack
{
char data[30];
int top;
public:
void init()
{
    top=-1;
}
int is_empty();
void push(char);
char pop();
int precedence(char);
};
int stack::is_empty()
{
if(top==-1)
    return(1);
return 0;
}
void stack::push(char op)
{
top++;
data[top]=op;
}
char stack::pop()
{
char x;
x=data[top];
top--;
return(x);
}
int stack::precedence(char op)
{
if(op=='(')
    return(1);
if(op=='+' || op=='-')
    return(2);
if(op=='*' || op=='/' || op=='%')
    return(3);
if(op=='^')
    return(4);
return(5);
}
int main()
{
stack s;
string iexp,pexp;
int i,j;
j=0;
char op;
s.init();
cout<<"\n enter an infix expr.: ";
cin>>iexp;
for(i=0;i<iexp.length();i++)
{
    if(isalpha(iexp.at(i)))
    {
        pexp.at(j)=iexp.at(i);
        j++;
    }
    else
    {
        if(s.is_empty())
        {
            s.push(iexp.at(i));
        }
        else
        {
            if(iexp.at(i)=='(')
            {
                s.push(iexp.at(i));
            }
            if(iexp.at(i)==')')
            {
                while((op=s.pop())!='(')
                {
                pexp.at(j)=op;
                j++;
                }
            }
        while(s.precedence(iexp.at(i))<=s.precedence((op=s.pop())))
            {
                pexp.at(j)=op;
                j++;
            }`
        s.push(iexp.at(i));

        }
    }
 ``}
while(!s.is_empty())
{
    op=s.pop();
    pexp.at(j)=op;
    j++;
}
pexp.at(j)='\0';
cout<<"\n postfix expr. is : \t"<<pexp;
return 0;
}

所以请帮我解决这个问题。

1 个答案:

答案 0 :(得分:0)

我认为你不能使用

附加到字符串
pexp.at(j) = ...;

尝试使用

pexp += ...; 

代替(在你附加到pexp的所有地方)