• 动态数组。。。。。。


    #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;
    }

  • 相关阅读:
    Ubuntu vi命令
    Aria2 使用
    axel 参数 文件下载地址
    序列化模块、加密模块
    项目开发规范、time模块、日志
    递归函数(了解)
    模块
    函数进阶四(装饰器、内置函数)
    函数进阶三(生成器、生成器表达式、匿名函数)
    函数进阶二(函数名运用,闭包,迭代器)
  • 原文地址:https://www.cnblogs.com/ccmfc/p/2276575.html
Copyright © 2020-2023  润新知