请教C++高手,用C++做一到关于字符串的题

来源:百度知道 编辑:UC知道 时间:2024/06/16 03:27:25
字符串类设计
1) 数据成员:char *
2) 构造函数:①string(char *p);②string(char ch, int n),字符ch重复n次;③string(const string & s1);拷贝构造函数;④string();
3) 成员函数:输入、输出、Left(截取字符串左侧若干字符并返回)、Right(截取右侧若干字符)、Mid(截取中间若干字符)、GetLength(返回长度)、Find(查找指定字符或子串首次出现位置,查找不到返回-1)。
4) 重载运算符:=、==、+(实现字符串对象与普通字符相加运算、字符串对象之间相加、字符串对象与普通字符串相加的运算)、+=。

#include <iostream>
#include <memory.h>
#include <assert.h>
using namespace std;
class String
{
private:
char* c_str;
public:
String(char* p="")
{
assert((c_str=(char*)malloc(strlen(p)+1))!=NULL);
strcpy(c_str,p);
}
String(char ch,int n)
{
assert((c_str=(char*)malloc(n+1))!=NULL);
for(int i=0;i<n;i++)
c_str[i]=ch;
c_str[n]='\0';
}
String(const String& s1)
{
assert(s1.c_str!=NULL);
assert((c_str=(char*)malloc(strlen(s1.c_str)+1))!=NULL);
strcpy(c_str,s1.c_str);
}
//String(){}
String Left(int n) const
{
assert(n>0);
assert(n<=strlen(c_str));
char* tmp=(char*)malloc(n+1);
assert(tmp!=NULL);
strncpy(tmp,c_str,n);
tmp[n]='\0';
return String(tmp);
}
String Right(int n) const
{
asser