C ++代码中的STL分段错误和内存不足错误

时间:2015-02-10 21:54:40

标签: c++ stl segmentation-fault out-of-memory

#include <iostream>
#include <string>
#include <stack>
using namespace std;

int main(void) {
    // creating a stack of characters
    std::stack<char> stk;
    // exp will store the current read expression
    string exp;
    // number of tes cases
    int test;
    std:: cin >> test;
    // 1st for loop to be run up to value of test.
    // Added a few "cout"s for debugging for my own.
    for(int i=1;i<=test;i++)
        {
            cout<<"into the loop\n";
            getline (cin,exp);
            cout<< "have read the expression";
            std:: cout << exp;
            int explength= exp.length();
            cout << explength;
            // this loop will run up to the length of the string
            for(int j=0;j<explength;j++)
                {    // if the read character is a small case char,print it
                    if(exp.at(j)>=97 && exp.at(j)<=122)
                        std::cout << exp.at(j);
                    // Handling special symbols
                    // high to low :  (),/,*,-,+

                    else
                        {
                            if(exp.at(j)=='(')
                                stk.push('(');
                            else if (exp.at(j) == ')')
                                    {
                                        while (stk.top()!='(')
                                            {
                                            std::cout << stk.top();
                                            stk.pop();
                                            }
                                        stk.pop();
                                    }
                            else if (exp.at(j) == '^')
                                    {
                                        while (stk.top()!='^')
                                        {
                                            std::cout <<stk.top();
                                            stk.pop();
                                        }
                                        stk.push('^');
                                    }
                            else if (exp.at(j) == '/')
                                    {
                                        while (stk.top()!='/' || stk.top()!='^' )
                                            {
                                            std::cout << stk.top();
                                            stk.pop();
                                            }
                                        stk.push('/');
                                    }
                            else if (exp.at(j) == '*')
                                    {
                                        while (stk.top()!='*' || stk.top()!='/' || stk.top()!='^')
                                            {
                                            std::cout << stk.top();
                                            stk.pop();
                                            }
                                        stk.push('*');
                                    }
                            else if (exp.at(j) == '-')
                                    {
                                        while (stk.top()!='-' || stk.top()!='*' || stk.top()!='/' || stk.top()!='^')
                                            {
                                            std::cout << stk.top();
                                            stk.pop();
                                            }
                                        stk.push('-');
                                    }
                            else if (exp.at(j) == '+')
                                    stk.push('+');

                        }
                }
        std::cout << endl;
        }
    return 0;
}

此代码采用&#34; test&#34;表达式的数量,逐个处理,将每个表达式作为字符串处理,并将其RPN输出到控制台。第一个循环是阅读&#34;测试&#34;表达式数和第二个for循环包含处理每个字符串的逻辑。由于这是我的第一个STL程序,因此该代码可能包含一些愚蠢的函数调用。

我正在尝试使用C ++ STL中的堆栈将给定的表达式数更改为Reverse Polish Notation。当我在Ideone上运行此代码时,代码进入1st for循环但不打印读取的表达式&#34; string exp&#34;。当我在我的Windows PC(G ++编译器)上运行它时,它不会在1st for循环中打印任何内容。它有时会在Ideone上产生分段错误和一些时间内存信号。太沮丧了。我尝试用GDB调试但没用。任何帮助将不胜感激。我编写此代码的问题陈述是:http://www.spoj.com/problems/ONP/ EDIT1:优先级高:(),/,*, - ,+:低

0 个答案:

没有答案