PDA

View Full Version : سوال: مشکل در Stack در C++



SaidJan
سه شنبه 13 اسفند 1392, 05:52 صبح
سلام
نصف بیشتره این برنامه رو نوشتم، ولی‌ توی ساختن stack گیر کردم. نمیدونم چجوری باید این رو حل کرد.
می‌خوام یه برنامه بنویسم که یوزر یه کلمه وارد کنه. بعد با استفاده از stack به یوزر بگه که این کلمه بر عکس هم همون جوریه یا نه. مثل کلمهٔ: dad یا mom که اگه بر عکسش کنی‌ همون جوری نوشته می‌شه.
تا اینجا رو نوشتم (در ضمن می‌خوام حتما stack‌هایی‌ که قبل از main ساختم بمونه)


#include "stdafx.h"
#include <iostream>
//#ifndef STACK_H
#define STACK_H
using namespace std;

const int SIZE=25;
enum {EMPTY=-1,FULL=SIZE-1};

class Stack
{
public:
Stack();
bool emptyStack();
bool fullStack();
void push(char c);
char pop();
char topElement();
private:
char s[SIZE];
int top;
};

Stack::Stack()
{
top=EMPTY;
}
bool Stack::emptyStack()
{
if (top==EMPTY)
return true;
else
return false;
}
bool Stack::fullStack()
{
if (top==FULL)
return true;
else
return false;
}
void Stack::push(char c)
{
if (!fullStack())
{
++top;
s[top]=c;
}
else
cout<<"is full"<<endl;
}
char Stack::pop()
{
char c;
if (!emptyStack())
{
c=s[top];
--top;
return c;
}
else
{
cout<<"The stack is empty! pop"<<endl;
return '#';
}
}
char Stack::topElement()
{
if (!emptyStack())
return s[top];
else
{
cout<<"The stack is empty! topE"<<endl;
return '#';
}
}



int main()
{

char c;
int number=0;
int count=0;

cout<<"\nEnter a character element: ";
cin>>c;
stk.push(c);
}
cout <<"\nThe word is: " << endl;
while (!stk.emptyStack())
cout << stk.pop()<<endl;
stk.pop();
return 0;
}

behnia_k
سه شنبه 13 اسفند 1392, 08:05 صبح
(در ضمن می‌خوام حتما stack‌هایی‌ که قبل از main ساختم بمونه)



قبل از main چیزی نساختین!

SaidJan
سه شنبه 13 اسفند 1392, 09:08 صبح
قبل از main چیزی نساختین!

چرا دیگه. نصف بیشتر این کد قبل از Main هست که میخوام بمونه. یعنی نمیخوام از include stack استفاده کنم. واسه همین نوشتم اینارو.

ebi_khatar00
سه شنبه 13 اسفند 1392, 13:03 عصر
سلام دوست من.
من مشکل رو نفهمیدم که چی هست؟
الان مشکلت کجاست دقیقا؟

SaidJan
سه شنبه 13 اسفند 1392, 23:29 عصر
سلام دوست من.
من مشکل رو نفهمیدم که چی هست؟
الان مشکلت کجاست دقیقا؟

میخوام چنین برنامه ای بسازم که یه کلمه از کاربر بگیره و بگه که این کلمه برعکسش کنی بازم همونجوری خونده میشه یا نه. مثل کلمه MOM یا DAD یا RADAR و ....
میخوام از stack استفاده کنم. push و pop و fullstack و ... رو تعریف کردم قبل از main .ولی نمیدونم توی main چی بنویسم.

ali chegini
چهارشنبه 14 اسفند 1392, 00:00 صبح
سلام.
میتونی یک استک در نظر بگیری.
تو اولی ورودی رو به ترتیبی که می خونی پوش کنی.
ورودی که از کاربر می گیری رو کاراکتر به کاراکتر با کاراکتری که از پاپ کردن استک به دست میاد مقایسه کنی.

ebi_khatar00
چهارشنبه 14 اسفند 1392, 13:59 عصر
خب تو main دو تا آرایه بگیر
یکی رو کلمه ی ورودی کاربر بذار
دومی رو برعکس شده ی اون که از stack پاپ میشه
یعنی اول که تک تک حروف رو میخونی هم تو آرایه بریز هم تو استک
بعدش از استک پاپ کن و بریز تو آرایه دوم
بعدش آرایه ها رو مقایسه کن
البته با یه آرایه هم میشه اینطوری که وقتی که از استک پاپ میکنی همون لحظه با آرایه اولت تک تک مقایسه کنی و تو آرایه دوم نریزی
اگه کد میخوای بگو بنویسم

SaidJan
دوشنبه 19 اسفند 1392, 07:42 صبح
من درست نفهمیدم چون تازه stackها رو دارم یاد میگیرم. میشه بنویسید واسم کد رو؟
ممنون میشم.

PedramH
چهارشنبه 21 اسفند 1392, 23:11 عصر
int main(){
string input ;
Stack stk ;
cout << "Enter a Word : \n" ;
cin >> input ;
for (int i=0 ; i < input.size() ; i++){
stk.push(input[i]) ;
}
bool flag = 1 ;
for (int j = 0 ; j < input.size() ; j++ ) {
if (input[j] != stk.topElement()) {
flag = 0 ;
break ;
}
stk.pop() ;
}
if (flag == 1) {
cout << "YES" ;
}
else{
cout << "NO" ;
}
}

این کدی که برنامه شما رو اجرا کنه . برای اینکه کار کنه باید string رو اول برنامه include کنید . یا اینکه میتونید خودتون با کاراکتر بنویسیدش.

اون قسمت کلاس Stack رو خودتون نوشتید؟

negative60
پنج شنبه 22 اسفند 1392, 18:53 عصر
من به کدت نگاه ننداختم ولی به طور کلی بايد کلمه رو دريافت کنيد و در يک متغير نگهداری کنيد و به وسيله تابع strrev برعکس شده کلمه رو رو داخل متغير ديگه بريزيد و در نهايت دو متغير رو با هم مقايسه کنيد

SaidJan
پنج شنبه 07 فروردین 1393, 08:28 صبح
این کدی که برنامه شما رو اجرا کنه . برای اینکه کار کنه باید string رو اول برنامه include کنید . یا اینکه میتونید خودتون با کاراکتر بنویسیدش.

اون قسمت کلاس Stack رو خودتون نوشتید؟

ممنون از کمکت. کار کرد.

آره خودم نوشتم. ولی چرا وقتی پاکش میکنم با کدی که شما نوشتی زیر کلمه Stack خط میکشه؟ با وجود اینکه #include <stack> رو هم نوشتم.

این یعنی چی؟
if (input[j] != stk.topElement())

PedramH
پنج شنبه 07 فروردین 1393, 11:02 صبح
ممنون از کمکت. کار کرد.

آره خودم نوشتم. ولی چرا وقتی پاکش میکنم با کدی که شما نوشتی زیر کلمه Stack خط میکشه؟ با وجود اینکه #include <stack> رو هم نوشتم.

این یعنی چی؟
if (input[j] != stk.topElement())
در مورد سوال اول : به خاطر اینه که کلاسی که شما نوشتید اسمش Stack (با S بزرگ) ولی کلاس اصلی C++‎‎‎ اسمش stack (با s کوچیکه) باید اونا رو تغییر بدید
به علاوه برای استفاده از stack خود C++‎ باید به جای stk.topElement() از stk.top() استفاده کنید
سوال دوم :
input [j] یعنی همون کاراکتر j ام ورودی . این شرط رو برای این گذاشتم که با اولین کاراکتری که با شرایط ما جور نبود حلقه تموم بشه و دیگه ادامه پیدا نکنه