动态数组。。。。。。

#include <iostream>
using namespace std;
#include <conio.h>

#define MAX_ARRAY_BUFF 12
#define CHAR_ENTER '\r'
#define CHAR_BACK '\b'

#define DELETE(p) \
{\
if(p)\
{\
delete(p);\
p=NULL;\
}\
}

#define BACK_HANDLE \
{\
putchar('\b');\
putchar(' ');\
putchar('\b');\
}

class Array
{
public:
Array();
virtual ~Array();
public:
char* a_str()const;
int in();

private:
char *m_pArr;
};

Array::Array()
{
this->m_pArr=new char[MAX_ARRAY_BUFF];
}

Array::~Array()
{
if (this->m_pArr)
{
delete(m_pArr);
this->m_pArr=NULL;
}
}

int Array::in()
{
int i=0;
int j=1;
char *pTmp=new char[MAX_ARRAY_BUFF];

while((*(pTmp+i)=getch()) && (*(pTmp+i)!=CHAR_ENTER))
{
if(CHAR_BACK==*(pTmp+i))
{
if (i>1 && *(pTmp+i-1)<0)
{
BACK_HANDLE;
BACK_HANDLE;
i-=2;
continue;
}
i--;
BACK_HANDLE;
continue;
}
putchar(*(pTmp+i));
i++;
if (i>=j*MAX_ARRAY_BUFF)
{
j++;
strncpy(this->m_pArr, pTmp, i);

DELETE(pTmp);
pTmp=new char[j*MAX_ARRAY_BUFF];

strncpy(pTmp, this->m_pArr, i);

DELETE(this->m_pArr);
this->m_pArr=new char[j*MAX_ARRAY_BUFF];
}
}
*(pTmp+i)='\0';

strcpy(this->m_pArr, pTmp);
DELETE(pTmp);

return i;
}

char* Array::a_str()const
{
return this->m_pArr;
}

int main()
{
Array a;
while(1)
{
cout<<a.in()<<endl;
cout<<a.a_str()<<endl;
}

return 0;
}

原文地址:https://www.cnblogs.com/ccmfc/p/2276575.html