#c #stack
#c #стек
Вопрос:
У меня есть пустой стек целых чисел и q запросов в следующем формате: Push x: добавить x в верхнюю часть стека Pop: удалить верхнюю часть стека Top: распечатать верхнюю часть стека Пример ввода: 10 Push 5 Top Push 6 Top Push 3 Top Pop Top Pop Top Вывод: 5 6 3 6 5 Я помещу свой код в комментарий, потому что я не знаю, как поместить его здесь .. я знаю, что это крайне неправильно, но, пожалуйста, мне нужна помощь, чтобы улучшить его
#include <iostream>
#include <stack>
using namespace std;
int main()
{
stack<int>st;
int n,a;
cin>>n;
string s;
cin>>s;
for(int i=0;i<n;i )
{
if(s=="push")
{
cin>>a;
st.push(a);
}
if(s=="pop")
st.pop() ;
if(s=="top")
cout<<st.top()<<endl;
}
}
Комментарии:
1. Чтобы добавить свой код к вашему вопросу, отредактируйте его и скопируйте и вставьте свой код туда, где указано.
2. #включить <iostream> #включить <stack> с использованием пространства имен std; int main() { stack<int>st; int n,a; cin>>n; string s; cin>>s; for(int i=0;i<n; i ) { if(s==»push»){ cin>>a; st.push(a); } if(s==»pop») st.pop() ; if(s==»top») cout<
3. Сэр, я пробовал, но это не работает
4. Он говорит, Упс! Ваш ответ не может быть отправлен, потому что: похоже, что ваше сообщение содержит код, который неправильно отформатирован как код. Пожалуйста, сделайте отступ во всем коде на 4 пробела, используя кнопку code toolbar или сочетание клавиш CTRL K. Для получения дополнительной справки по редактированию щелкните значок [?] на панели инструментов.
5. Какой вопрос . «Мне нужна помощь, чтобы улучшить это» — это не вопрос. Ваш опубликованный вопрос должен включать описание того, для чего предназначен ваш код, что он, похоже, делает, чем эти вещи отличаются, какие усилия по отладке вы предприняли до сих пор, и что эти усилия дали на данный момент. Связанный, сравнение строк чувствительно к регистру, поэтому, например, «Pop» никогда не будет равно «pop». если мы хотим верить, что образец входных данных точен.
Ответ №1:
Вам нужно проверить еще одно условие, независимо от того, является ли стек пустым или нет, например if(s=="pop" amp;amp; s.empty() == false)
, тогда только вы можете всплывать. Аналогичная вещь с top. В противном случае код выдаст ошибку во время выполнения, когда стек пуст. Кроме того, попробуйте использовать #include<bits/stdc .h>
. Помимо этого, поскольку в соответствии с вашим вопросом есть q запросов, вам нужно выполнить cin>>s
внутренний for
цикл.
Комментарии:
1. попробуйте использовать #include<bits/stdc .h> Который не является переносимым, нестандартным и без необходимости извлекает каждый заголовок из стандартной библиотеки.
2. Затем вы можете оставить его, если он не переносим.
Ответ №2:
Я не вижу цели for
цикла, как закодированного. Вместо этого (и принимая во внимание ответ ajourney), я бы сделал:
int main()
{
stack<int>st;
for ( ; ; )
{
string s;
cin >> s;
if(s=="push")
{
int a;
cin>>a;
st.push(a);
}
if(s=="pop")
{
if (!st.empty ())
st.pop() ;
else
cout << "Stack is emptyn";
}
if(s=="top")
{
if (!st.empty ())
cout<<st.top()<<endl;
else
cout << "Stack is emptyn";
}
if(s=="quit")
break;
}
}
Кроме того, я переместил объявления s
и a
, чтобы они были как можно ближе к месту использования.
Комментарии:
1. сандера но теперь код не останавливается, я хочу, чтобы он остановился после выполнения q запросов
2. @sondosToney Почему? Не лучше ли, если он остановится, когда пользователь скажет ему?
3. есть ли у вас какая-либо учетная запись в социальных сетях Facebook или Instagram, чтобы я мог с вами связаться, пожалуйста?
4. @sondosToney Нет.
5. Хорошо, спасибо за ваш ответ .. я отредактировал некоторые из них, и теперь это лучший ответ