C++string类部分函数仿写(用C语言实现)

本文介绍了一个简单的C++字符串类的实现,包括构造函数、析构函数、字符串比较、长度获取及替换等功能,并展示了如何使用指针管理内存。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注意:有指针成员情况下,写构造函数时一定要先分配空间
同时,要写析构函数,手动释放堆空间

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

class stringC
{
    public:
//构造 析构 
    stringC();
    stringC(int,char);//重复输出某个字符
    stringC(const char*);//输出一串字符
    stringC(const char*,int);//拷贝任意长度字符到新字符串
    ~stringC();
    stringC(stringC&);
//比较
    int compare(stringC&);
    int compare(const char*);
    int compare(int,int,stringC&);
//长度
    int length();
    void Cout();
//替换
    stringC* replace(int,int,stringC&);
    stringC* replace(int,int,stringC&,int);

    private:
        char* s;
};
/**************构造 析构 *************/
stringC::stringC()
{
    this->s=NULL;
}
stringC::stringC(int num,char c)
{
    this->s=new char[num+1];
    int i;
    for(i=0;i<num;i++)
            s[i]=c;
    s[i]='\0';
}
stringC::stringC(const char*s)
{
    this->s=new char[strlen(s)+1];
    strcpy(this->s,s);
}
stringC::stringC(stringC& p)
{
    this->s=new char[strlen(p.s)+1];
    strcpy(this->s,p.s);
}
stringC::~stringC()
{
    while(this->s!=NULL)
    {
            delete [] this->s;
            this->s=NULL;//注意野指针问题
    }
}
stringC::stringC(const char* p,int num)
{
    this->s=new char[num+1];
    int i;
    strncpy(this->s,p,num);
}
/***************比较******************/
int stringC::compare(int index,int length,stringC& str)
{
    char *p=new char[length+1];
    int i;
    for(i=index;i<index+length;i++)
        p[i-index]=this->s[i];
    p[i-index]='\0';
    return strcmp(p,str.s);
}
int stringC::compare(const char* p)
{
    return strcmp(this->s,p);
}
int stringC::compare(stringC& p)
{
    return strcmp(this->s,p.s);
}
/***************长度**************/
int stringC::length()
{
    return strlen(this->s);
}

void stringC::Cout()
{
    cout<<s<<endl;
}

stringC* stringC::replace(int index,int num,stringC& str)
{//用str内的num个字符,替换自身从index开始的num个字符
        int i;
        for(i=index;i<index+num;i++)
        {
            this->s[i]=str.s[i-index];
        }
        return this;

}
int main()
{
/*  stringC a(5,'c');
    a.Cout();

    stringC b("hello cmz");
    b.Cout();

    stringC c(b);
    c.Cout();

    stringC d("hello",2);
    d.Cout();

    stringC a1("hello");
    stringC a2("hello");
    cout<<a1.compare(a2)<<endl;
    cout<<a1.compare("hello")<<endl;

    stringC a3("world hello");
    cout<<a3.compare(6,5,a1)<<endl;

    cout<<a1.length()<<endl;

    stringC a4("hhhhh");
    a1.replace(0,5,a4);
    a1.Cout();
*/  
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值