每当以前使用的数组位置用完就重新分配2倍的内存
" target="_blank">[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
我也不敢确定我想得对不对,老看兄弟你在这论坛发帖,想和你交个朋友,我也才学1个月,知道你大1,我说说我的想法。
输入一个字符数组(即字符串),给个指向数组的指针,然后把字符逐个压入栈中(这需要建立一个Stack类,用成员函数push()压入,并检测一下,看是否危险)
方便起见,我之间写写来,没有编译,在外面,大家帮我检查下,我也很想学C++。谢了!~
#include<iostream>
#include<cassert>
using namespace std;
const int maxStr = 100;
class Stack
{ int _top,my_max,TOP;
char *_arr;
public:
Stack():_top(0),my_max(maxStr){_arr = new char[maxStr];}
~Stack(){delete [] _arr;}
Get_top(){return _top;}
void push(char ch);
int pop();
void grow();
};
void push(char ch)
{
assert(_top<my_max); //边界检测
//如果剩余的空间到达危险区域,则则调用函数grow(),使其在自由存储区中分配的空间番倍。
if (my_max-_top<20) // 这里的20是每次输入的字符不会超过的数字。(自己可以根据自己的情况而定义适当的数值)
grow();
_arr[_top]=ch;
_top++;
TOP=_top;
}
void grow()
{
char *New_arr = new char[2*my_max]
for(int i=0;i<_top;i++)
New_arr[i]=_arr[i];
delete [] _arr;
my_max*=2;
_arr=0;
}
int pop()
{
assert(_top>-1); //边界检测
--_top;
return _arr[TOP-_top-1];
}
int main()
{
char c1,c2;
Stack stack;
cout<<"请输入第一个字符串:"<<endl;
do
{
cin.get(c1);
stack.push(c1);
}while(c1);
cout<<"请输入第二个字符串:"<<endl;
do
{
cin.get(c2);
stack.push(c2);
}while(c2);
while(stack.Get_top)cout<<pop();
system("pause");
return 0;
}
由于是在网吧编的,所以只是一次性编程,肯定是很多错误的,希望大家给我提出问题,谢了~!