Я запустил это и набрал «12+» в качестве выражения. Когда он попадает в цикл while, он застревает, как будто условие никогда не выполняется. Я не понимаю, почему это так, потому что прямо перед циклом while «it» равно 2, поэтому цикл даже не должен использоваться.
//array based stack implementation
class Stack
{
private:
int capacity; //max size of stack
int top; //index for top element
char *listArray; //array holding stack elements
public:
Stack (int size = 50){ //constructor
capacity = size;
top = 0;
listArray = new char[size];
}
~Stack() { delete [] listArray; } //destructorvoid push(char it) { //Put "it" on stack
listArray[top++] = it;
}
char pop() { //pop top element
return listArray [--top];
}
char& topValue() const { //return top element
return listArray[top-1];
}
char& nextValue() const {//return second to top element
return listArray[top-2];
}int length() const { return top; } //return length};
int main()
{
string exp;
char it = ' ';
int count;
int push_length;cout << "Enter an expression in postfix notation:\n";
cin >> exp;
cout << "The number of characters in your expression is " << exp.length() << ".\n";
Stack STK;
for(count= 0; count < exp.length() ;count++)
{
if (exp[count] == '+')
{
it = exp[count - 1];
cout << it << "\n";while (it != 1 || it != 2 || it != 3 || it != 4 || it != 5 || it != 6 || it != 7 || it != 8 || it != 9 || it != 0)
{
cout << it << "\n";
it = exp[count--];
}
STK.push(it);
//cout << STK.topValue() << "\n";
it = exp[count --];
if (it == 1 || it == 2 || it == 3 || it == 4 || it == 5 || it == 6 || it == 7 || it == 8 || it == 9 || it == 0){
STK.push(it);
cout << it;
}
cout << STK.topValue() << "\n";
it = STK.topValue() + STK.nextValue();
STK.pop();
STK.pop();
STK.push(it);
cout << STK.topValue() << "\n";
}}
cout << "The number of characters pushed into the stack is " << STK.length() << ".\n";
push_length = STK.length();return(0);
}
Как вы упоминаете, ваш while
пункт всегда true
,
while (it != 1 || it != 2 || it != 3 || it != 4 || it != 5 || it != 6 || it != 7 || it != 8 || it != 9 || it != 0)
it
будет всегда не быть некоторые из этих чисел.
Вы мог изменить каждый ||
в &&
в этом заявлении, так как это, вероятно, то, что вы имели в виду.
И изменить 1
в '1'
, 2
в '2'
, и так далее…
Более ясный подход был бы:
while ( !std::isdigit(it) )
Других решений пока нет …