模拟实现string的增删查改

本文介绍了一个自定义字符串类的实现细节,包括构造函数、拷贝构造函数、赋值运算符重载及各种字符串操作方法如插入、删除、查找等,并展示了如何通过内存管理确保资源正确释放。

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

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstdlib>
#include <cassert>


using namespace std;


class String
{
public:
String(char* str="")
:_str(new char[strlen(str)+1])
,_sz(strlen(str))
,_capacity(_sz)
{
strcpy(_str,str);
}


String(const String& s)
:_str(NULL)
,_sz(0)
,_capacity(0)

String tmp(s._str);
Swap(tmp);
}


String& operator=(String s)
{
Swap(s);
return *this;
}


~String()
{
cout<<"delete"<<endl;
delete[] _str;
}
char* GetStr()
{
return _str;
}


public:
void Swap(String& s)
{
swap(_str,s._str);
_sz = s._sz;
_capacity = s._capacity;
}
size_t Size()
{
return _sz;
}
size_t Capacity() 
{
return _capacity;
}


// 增删查改 
void PushBack(char ch)
{
if(_sz == _capacity)
{
Expand(_sz*2);
}
_str[_sz] = ch;
++_sz;
_str[_sz]='\0';
}
void PushBack(const char* str) 
{
size_t len= strlen(str);
if((_sz+len)> _capacity)
{
Expand(_sz+len);
}
strcpy((_str+_sz),str);
_sz += len;
}
void PopBack(char ch) 
{
int i = _sz;
if(_sz == _capacity)
{
Expand(_sz*2);
}
for(i = _sz;i >= 0;i --)
{
_str[i+1]=_str[i];
}
_str[0]=ch;
}


void Insert(size_t pos, char ch) 
{
if(_sz == _capacity)
{
Expand(_sz*2);
}
int end = _sz;
while(end >= (int)pos)
{
_str[end+1]=_str[end];
--end;
}
_str[pos]=ch;
++_sz;
}
void Insert(size_t pos, const char* str)
{
size_t len= strlen(str);
if((_sz+len)> _capacity)
{
Expand(_sz+len);
}
int end = _sz;
while(end >=(int)pos)
{
_str[end+len]=_str[end];
--end;
}
while(*str)
{
_str[pos++] = *(str++);
}
_sz+=len;
}
void Erase(size_t pos, size_t count)
{
if(pos+count >_sz)
{
_str[pos]='\0';
_sz=pos;
}
else
{
strcpy(_str+pos,_str+pos+count);
_sz-=count;
}
}
size_t Find(char ch) const 
{
size_t pos = 0;
while((_str[pos] != ch)&&(_str[pos] != '\0'))
{
pos+=1;
}
if(_str[pos] !='\0')
{
return pos;
}
else
{
return -1;
}


}
size_t Find(const char* str) const
{
assert(str);
int len = strlen(str);
size_t src = 0;
size_t pos = 0;


while (pos + len <= _sz)
{
size_t sub = 0;
src = pos;


while ((_str[src] == str[sub]) && ((int)sub < len))
{
src += 1;
sub += 1;
}


if (sub == len)
return pos;


++pos;
}
return -1;
}
char& operator[](size_t pos) 
{
assert(pos < _sz);
return _str[pos];
}
inline bool operator<(const String& s) const
{
size_t src = 0;
size_t sub = 0;
while((_str[src]!= '\0')&&(s._str[sub]!='\0'))
{
if(_str[src] < s._str[sub])
{
return true;
}
else if(_str[src] > s._str[sub])
{
return false;
}
src++;
sub++;
}
if(_str[src] == '\0')
{
return true;
}
else
{
return false;
}
}
inline bool operator<=(const String& s) const
{
return (_str<s._str)||(_str == s._str);
}
inline bool operator>(const String& s) const
{
return !(_str <= s._str);
}
inline bool operator>=(const String& s) const
{
return (_str>s._str)||(_str == s._str);
}
inline bool operator==(const String& s) const
{
size_t src = 0;
size_t sub = 0;
while ((_str[src] != '\0') && ((s._str[sub] != '\0')))
{
if (_str[src] != s._str[sub])
{
return false;
}
++src;
++sub;
}
if ((_str[src] == '\0') && (s._str[sub] == '\0'))
{
return true;
}
else
{
return false;
}
}
inline bool operator!=(const String& s)const
{
return !(_str == s._str);
}
void Expand(size_t n) 
{
if(n > _capacity)
{
_str = (char*)realloc(_str,n+1);
assert(_str);
_capacity = n;
}
}

private:
char* _str;
size_t _sz;//字符个数
size_t _capacity;//容量
};
内容概要:《中文大模型基准测评2025年上半年报告》由SuperCLUE团队发布,详细评估了2025年上半年中文大模型的发展状况。报告涵盖了大模型的关键进展、国内外大模型全景图及差距、专项测评基准介绍等。通过SuperCLUE基准,对45个国内外代表性大模型进行了六大任务(数学推理、科学推理、代码生成、智能体Agent、精确指令遵循、幻觉控制)的综合测评。结果显示,海外模型如o3、o4-mini(high)在推理任务上表现突出,而国内模型如Doubao-Seed-1.6-thinking-250715在智能体Agent和幻觉控制任务上表现出色。此外,报告还分析了模型性价比、效能区间分布,并对代表性模型如Doubao-Seed-1.6-thinking-250715、DeepSeek-R1-0528、GLM-4.5等进行了详细介绍。整体来看,国内大模型在特定任务上已接近国际顶尖水平,但在综合推理能力上仍有提升空间。 适用人群:对大模型技术感兴趣的科研人员、工程师、产品经理及投资者。 使用场景及目标:①了解2025年上半年中文大模型的发展现状与趋势;②评估国内外大模型在不同任务上的表现差异;③为技术选型和性能优化提供参考依据。 其他说明:报告提供了详细的测评方法、评分标准及结果分析,确保评估的科学性和公正性。此外,SuperCLUE团队还发布了多个专项测评基准,涵盖多模态、文本、推理等多个领域,为业界提供全面的测评服务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值