比较堆栈

Comparing stacks

本文关键字:堆栈 比较      更新时间:2023-10-16

我有一个项目可以比较两个堆栈的内容,并且我对此功能有问题。我相信我已经完成了其余的计划。我在b.mycharacters.empty(((表达式必须具有类类型(和b == b. mycharacters(没有操作员" =="这些操作数与这些操作匹配(。

bool CharStack::IsEqual(CharStack & B) 
{
    if (B.empty()) 
    {
        cout << "Stack is empty" << endl;
        return false;
    } 
    else if (B.myCharacters.empty()) 
    {
        cout << "Stack is empty" << endl;
        return false;
    } 
    else if (B == B.myCharacters)
        return true;
}

任何帮助将不胜感激。

这是标题和驱动程序。他们是由老师为这个项目提供的,即使有更好的方法可以改变它们。

#include <iostream>
#include <string>
using namespace std;
const int STACK_CAPACITY = 128;
typedef char StackElement;
class CharStack
{
private:
    char myCharacters[STACK_CAPACITY]; // STL stack of chars.
    int myTop;
public:
    CharStack();
    bool empty();
    void push(const StackElement & value);
    StackElement top() const;
    void pop();
    void StringToStack(const string & inStr);
    friend ostream & operator <<(ostream & out, const CharStack & CS);
    CharStack Reverse();
    bool IsEqual(CharStack & B);
};

驱动程序

#include <string>
#include <cassert>
#include "Header.h"
using namespace std;
//introduces namespace std
int main(void)
{
    ifstream in;
    string fileName, line[30];
    int i = 0;
    CharStack N, M, P;
    cout << "Enter file name for palindrome check: ";
    cin >> fileName;
    in.open(fileName.c_str());
    assert(in.is_open());
    while (!in.eof())
    {
        getline(in, line[i]);
        N.StringToStack(line[i]);
        cout << N << endl;
        P = N;
        M = N.Reverse();
        if (P.IsEqual(M))
            cout << "This line is a palindrome line" << endl;
        else
            cout << "This line is not a palindrome line" << endl;
        i++;
    }
    cout << "nProgram ended normally.n";
    system("pause");
}

假设您的CharStack内部将字符保留在std::string中,即

class CharStack
{
    std::string myCharacters;    // internal data
  public:
    bool IsEqual(CharStack const&) const;
    /* ... */
};

IsEqual()应该返回,如果两个堆栈相同,则实现就是

bool CharStack::IsEqual(CharStack const&other) const
{
    return myCharacters == other.myCharacters;
}

这将一个空的和非空的堆栈比较不等,而是两个空的堆栈相等,这可以说是正确的行为。如果您希望两个空堆栈不等,则可以

bool CharStack::IsEqualNonEmpty(CharStack const&other) const
{
    return !myCharacters.empty() && myCharacters == other.myCharacters;
}

请注意,关键字const的各种用途。