Program/C & C++

c / c++로 문자열 스택(다중포인터)

너구리V 2011. 3. 28. 15:47

#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#define MAX 10
char **t, **p, **top, **bot;
void push();
void pop();
void display();
main()
{
 int get;
 char *data;
 
 for(;;){  
  printf("\n 메뉴 선택\n\n 1. push \n 2. pop");
        printf("\n 3. display\n 4. quit \n\n 번호를 입력하시오:  "); 
  scanf("%d", &get);
  switch(get) {
  case 1:
   data = (char *)malloc(MAX*(sizeof(char)));
   printf("\n문자열를 입력하시오 :");
   scanf(" %s",data);
   push(data);   
   break;
  case 2:
   pop();
   break;
  case 3:
   if(p == NULL){
    break;
   }
   display();
   break;
  case 4:
   exit(0);     
  }
 }
}
void push(i)
char *i;
{
 if(p == NULL) {
  p = (char *)malloc(MAX*(sizeof(char))); 
  bot = p;
  top = MAX + p - 1;
     printf("bottom의 포인터 : % p \n", bot);
        printf("top의 포인터 : % p \n", top);
 }
 if(p == top) {
  printf("\n stack full");
  return;
  }
 *p=i;
 printf("\n stack index : %d  stack data : %s", p, *p);  
 p++;
 
}
void pop()
{  
 if(p == NULL) {printf("\n stack empty");
               return;}
 p--;
 printf("\n\n stack pointer : %p   pop data : %s", p, *p);
 if(p <= bot) p = NULL;
 return;
}

void display()
{
 t = p-1;
 while(t >= bot) {
         printf("\n stack index : %d  stack data : %s", t, *t);  
   t--;
 }
 return;
}


#include<iostream.h>

#include<stdio.h>

#include<stdlib.h>

const int MAX=10;

class Stack{

private :

char *t, *p, *top, *bot;

public :

Stack();

void push(char);

void pop();

void display();

};

int main(){

Stack s1;

int get;

char data;

for(;;){

cout << "\n 메뉴 선택\n\n 1. push \n 2. pop\n 3. display\n 4. quit \n\n 번호를 입력하시오: "; //메뉴를 cout<< 문으로

cin >> get; // 메뉴 선택값 입력: cin>> 문으로

switch(get) {

case 1:// 선택값 1이면: 문자데이터를 입력해서 push

cout << "문자데이터를 입력하시오 :";

cin >> data;

s1.push(data);

break;

case 2:// 선택값 2이면: pop

s1.pop();

break;

case 3:// 선택값 3이면: display

s1.display();

break;

case 4:// 선택값 4이면: exit

exit(0);

}

}

}

Stack::Stack(){

p = new char[MAX];

bot = p;

top = MAX + p - 1;

cout<<"bottom의 포인터 : "<<&bot<<'\n';

cout<<"top의 포인터 : "<<&top<<'\n';

}

void Stack::push(char i)

{

if(p == top) {cout<<"\7\n stack full"<<'\n';

return;}

*p = i;

p++;

}

void Stack::pop()

{

if(p == NULL) {cout<< "\n\7 stack empty";

return;}

p--;

cout << "\n\n stack pointer :" << &p << " pop data : " << *p;

if(p <= bot) p = NULL;

return;

}

void Stack::display()

{

if (p == NULL) {cout <<"\n stack이 비었음\n"; return;}

t = p-1;

while(t >= bot) {

cout << "\n stack index :" << &t << " stack data : " << *t;

t--;}

return;

}

반응형

'Program > C & C++' 카테고리의 다른 글

Open CV  (0) 2011.04.11
c++콘솔 시계  (0) 2011.03.28
C++ / 기본문법 / using  (0) 2010.09.09
C++ / 기본문법 / namespace  (0) 2010.09.09
파일입출력 / printf 에서 자릿수 맞춰서 출력하기  (0) 2010.09.09