Member 12660833 Ответов: 1

Я получил много ошибок при выполнении проверки палиндрома с использованием методов stack n queue


#include <iostream>
#include <string>
#include <stack>
#include <queue>

using namespace std;

class Stack
{
    Node*top;
    int count;

public:
    Stack();
    void push(char);
    char topGet();
    char pop();
    void display();
    bool isEmpty();
    int size();
};

class Queue
{
    Node *tail;
    Node *head;
    int count;
    char data;

public:
    Queue();
    void Dequeue();
    void Enqueue(char);
    bool isEmpty();
    bool isFull();
    void display();
    int size();
    char topGet();
};

class Node
{
    Node *next;
    char data;

public:
    Node();
    void setNext(Node *);
    void setData(char);
    Node* getNext();
    char getData();
};

bool isPallindrome(string);
int main()
{
    string input;
    bool flag = true;
    while (flag) {
        cout << "Enter word to see PALINDROME OR NOT, Press x for Quit" << endl;
        cout << "> ";
        getline(cin, input);
        if (input == "x" || input=="X")
        {
            flag = false;
            return 0;

        }

        if (isPallindrome(input))
        {
            cout << input << " is aPallindrome" << endl;
        }
        else
        {

            cout << input << " is not aPallindrome" << endl;
        }


    }
}

bool isPallindrome(string str)
{
    Stack *s;
    Queue *q;

    while (true) {
        s = new Stack();
        q = new Queue();
        for (int i = 0; i < str.length(); i++) {
            s->push(str[i]);
            q->Enqueue(str[i]);
        }
        bool eq = true;
        if (s->size() == q->size()) {
            while (!s->isEmpty()) {
                if (s->topGet() == q->topGet())
                {
                    eq = true;
                }
                else
                {
                    eq=false;
                }
                s->pop();
                q->Dequeue();

            }
        }
        else {
            eq = false;
        }
        return eq;
    }
}

Stack::Stack()
{
    top = NULL;
    count = 0;
}
void Stack::push(char s)
{
    Node*newNode = new Node();
    newNode->setData(s);
    newNode->setNext(top);
    top = newNode;
    count++;
}

bool Stack::isEmpty()
{
    if (count == 0)
        return true;
    return false;
}
char Stack::topGet()
{
    if (count == 0)
        throw "Stack is Empty ";
    char tempS;
    tempS = top->getData();
    return tempS;
}
char Stack::pop()
{

    if (isEmpty())
        return NULL;
    Node *temp;
    char tempS;
    tempS = top->getData();

    temp = top;
    top = top->getNext();
    delete temp;
    count--;
    return tempS;
}
void Stack::display()
{
    cout << topGet() << " ";
}
int Stack::size()
{
    return count;
}

Queue::Queue()
{
    head = new Node();
    tail = new Node;
    data = ' ';
    count = 0;
}

void Queue::Dequeue()
{
    Node *temp;
    if (isEmpty())
    {
        throw "There is Nothing in front to Queue ";
    }
    temp = head;
    data = temp->getData();
    head = head->getNext();
    temp = NULL;
    delete temp;
    count--;

}

void Queue::Enqueue(char val)
{
    Node *newNode = new Node();
    data = val;
    newNode->setData(val);
    newNode->setNext(NULL);
    if (head->getNext() == NULL)
    {
        head->setNext(newNode);
        head->setData(val);
        tail->setNext(newNode);
        tail = head;
    }
    else
    {
        tail->setData(val);
        tail->setNext(newNode);
        tail = newNode;
    }
    count++;
}

bool Queue::isEmpty()
{
    if (count == 0)
    {
        return true;
    }
    return false;

}
void Queue::display()
{
    cout << data << " ";
}
bool Queue::isFull()
{
    if (count == 10)
    {
        return true;
    }
    return false;
}
int Queue::size()
{
    return this->count;
}
char Queue::topGet()
{
    if (count == 0)
        throw "Stack is Empty ";
    return head->getData();
}

Node::Node()
{
    next = NULL;
    data = NULL;

}
void Node::setNext(Node*next)
{
    this->next = next;
}
void Node::setData(char data)
{
    this->data = data;
}
Node*Node::getNext()
{
    return this->next;
}
char Node::getData()
{
    return  this->data;
}


Что я уже пробовал:

я не уверен, где я сделал что-то не так ... это было так давно, что я не касался c++

jeron1

Отредактируйте свой пост и перечислите ошибки. Это ошибки компилятора? ошибки во время выполнения?

Member 12660833

ошибка:
prog. cpp: 11:3: ошибка: неизвестное имя типа 'Node'
Узел * верхний;
^
prog. cpp: 26:3: ошибка: неизвестное имя типа 'Node'
Узел * хвост;
^
prog. cpp: 27:3: ошибка: неизвестное имя типа 'Node'
Узла *начальник;
^
prog. cpp:152:11: предупреждение: неявное преобразование нулевой константы в 'char' [- Wnull-conversion]
возвращать null;
~~~~~~ ^~~~
'\0'
прог.КПП:253:10: предупреждение: неявное преобразование в нулевой константы к 'голец' [-Wnull-преобразования]
данные = значение null;
~ ^~~~
'\0'

составлено по адресу https://ideone.com/7It4I4

Richard MacCutchan

Вы объявляете Node* в начале вашего Stack класс, но вы никогда не определяли Node тип. Вы также, кажется, переоцениваете то, что является простым делом копирования и реверсирования строки и сравнения ее с оригиналом. Прежде чем приступать к кодированию, необходимо хорошенько обдумать этот процесс.

1 Ответов

Рейтинг:
1

Patrice T

[Обновление] Во-первых, вы забыли сказать, что ошибки возникают во время компиляции, поэтому мой совет не соответствует проблеме. [/Обновление]

Вы должны научиться использовать отладчик как можно скорее. Вместо того чтобы гадать, что делает ваш код, пришло время увидеть, как он выполняется, и убедиться, что он делает то, что вы ожидаете.

Отладчик позволяет вам следить за выполнением строка за строкой, проверять переменные, и вы увидите, что есть точка, в которой он перестает делать то, что вы ожидаете.
Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]

Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
Когда код не делает того, что ожидается, вы близки к ошибке.

---------------------
Использование стека и очереди для проверки того, не слишком ли все усложняет палиндром.
Вы должны подумать об этом:
"Все должно быть сделано как можно проще, но не проще.” Альберт Эйнштейн

Попробуйте проверить палиндром вручную самым простым способом, и посмотрите, как вы это сделаете. Вам нужен стек или очередь ? Думаю, что нет.


Richard MacCutchan

Вряд ли это правильный ответ на вопрос, где код даже не будет компилироваться.

Patrice T

ОП даже не смог сказать, была ли это ошибка времени выполнения или время компиляции, когда он задал этот вопрос.