Как Записать цифры в один стек, а литералы в другой при считывании из строки?
С клавиатуры вводится строка символов. Сохранить ее, сформировав 2 стека - стек, содержащий литеры цифры, и стек, содержащий буквы латинского алфавита. Сформировать динамический список, в который поместить поочередно компоненты стеков. После исчерпания одного из стеков процедуру формирования динамического списка прекратить. Условие не выполняется, записываются все литералы только в стек num.
`#include <iostream>
#include <string>
class Node {
public:
char liter;
Node* next;
public:
Node(char liter) {
this->liter = liter;
this->next = NULL;
}
};
class Stack {
public:
Node* head;
Node* tail;
public:
Stack() {
this->head = this->tail = NULL;
}
~Stack() {//диструтор освобождает память
while (head != NULL) pop_front();
}
void pop_front() {//удаление первого эл
if (head = NULL)return;
if (head == tail) {
delete tail;
head = tail= NULL;
return;
}
Node* node = head;
head = node->next;
delete node;
}
//обавляем в начало элем
void push_front(char liter) {
Node* node = new Node(liter);
node->next = head;
head = node;
if (tail == NULL)
tail = node;
}
void show() {
while (head != NULL) {
std::cout << head->liter ;
head = head->next;
}
}
};
int main() {
Stack num,lit;
std::string str;
std::cout << "INPUT STRING" << std::endl;
std::cin >> str;
for (char ch : str){
if ('0' <= ch <= '9') num.push_front(ch);
else lit.push_front(ch);
}
lit.show();
return 0;
}
Ответы (1 шт):
Автор решения: Vladimir Ignatenko
→ Ссылка
Очень странно, что компилятор не ругнулся на это условие
if ('0' <= ch <= '9')
Попробуйте все же заменить на
if ('0' <= ch && ch <= '9')
И в качестве совета: выделяйте блоки скобками. Код будет понятней. И модифицировать его потом будет проще.