(HW)Palindrome使用堆栈和队列,运行时错误

时间:2014-07-20 15:00:20

标签: stack queue runtime-error palindrome

好吧,我有一个hw任务来检查插入的字符串是否是回文。首先必须将字符串插入堆栈,队列,然后进行比较。我已启动并运行该程序,对我来说就是这样。我的老师,在尝试评分时遇到(d)运行时错误。此外,getline portable是分配的要求,随附文件和说明。

这是老师的说明:


检查线是否是回文。忽略空格? y / n y(她运行代码)

要检查的输入行

(她得到运行时错误)

175 [main] csc240Summer2014PE8Student 10060 open_stackdumpfile:将堆栈跟踪转储到csc240Summer2014PE8Student.exe.stackdump


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


istream& getline_portable( istream& is, string& str ) {
    istream& ris = std::getline(is,str);
    if ( str.size() && str[str.size()-1] == '\r' )
    str.resize(str.size()-1);
    return ris;
}

int main()
{
stack<char> s;
queue<char> q;
char c, choice, b;
string str;
int i = 0;
int count = 0;

do
{

    cout<<"Check if a line is a palindrome. Ignore spaces? y/n ";
    cin >> b;
    cin.ignore();
    tolower(b);
    cout<<"Input line to check\n";
    getline_portable(cin,str);


    for(int j = 0; j < str.size(); j++)
        str[j] = tolower(str[j]);

    if(b == 'n')
    {
        for(int j = 0; j < str.size(); j++)
        {
            c = str[j];
            q.push(c);
            s.push(c);
        }
    }
    else if (b == 'y')
    {
        for(int j = 0; j < str.size() - count; j++)
        {
            c = str[j];
            if(isspace(c))
            {

            }
            else if(!isspace(c))
            {
                q.push(c);
                s.push(c);
            }                  
        }
    }


    do
    {
        if(q.front() != s.top())
        {
            i = false;
            break;
        }
        else
        {
            i = true;
            s.pop();
            q.pop();
        }
    }while(!q.empty() && !s.empty());

if (i == true)
    cout <<  str << " is a pallindrom.\n";
else if (i == false)
    cout << "Your input of " << str << " is not a pallindrome.\n";

cout << "Would you like to test another string? y/n ";
cin >> choice;
tolower(choice);
cin.ignore();
}while (choice == 'y');

cout << "Press enter to continue...";
cin.get();
return 0;
}

0 个答案:

没有答案