当前位置:文档之家› 【实验5】c++MyString类实现

【实验5】c++MyString类实现

ccnu_hupo_cpp_class_tst6exercise2_by:lele_2013_10_30
new不忘delete
Design the string class in the C++ library by providing your own implementation for the following functions (name your class MyString):
MyString();//构造
MyString(const char* cString);//地址不能变
char at(int index) const;//输入数组下标,返回字符
int length() const;//长度
void clear();//清空len=0
bool empty() const;//是否清空?len不变
int compare(const MyString& s) const;//
int compare(int index, int n, const MyString& s) const;
void copy(char s[], int index, int n);
char* data() const;
int find(char ch) const;
int find(char ch, int index) const;
int find(const MyString& s, int index) const;
*/
#include<iostream>
#include<string.h>
using namespace std;
class MyString
{
public:
MyString();
MyString(const char* cString);
char at(int index) const;//
int length() const;
void clear();
bool empty() const;
int compare(const MyString& s) const;
int compare(int index, int n, const MyString& s) const;
void copy(char s[], int index, int n);
char* data() const;
int find(char ch) const;
int find(char ch, int index) const;
int find(const MyString& s, int index) const;
~MyString()
cout<<"delete..."<<endl;
delete []a;
}
private:
char *a;
int len;
};
MyString::MyString(const char* cString)
{
if (cString==NULL)
{
a=new char[1];
a[0]=0;
int len=0;
}
else
{
a=new char [strlen(cString)+1];
strcpy(a,cString);
len=strlen(cString);
}
}
char MyString::at(int index) const
{
if(len==0)
{cout<<"no char in string"<<endl;
return 0;
}
if(index>len)
{
cout<<"the maximun array exceed"<<endl;
return 0 ;
}
else
{
return a[index-1];
}
}
int MyString::length() const
return len;
}
void MyString::clear()
{
if(!a)
{
delete []a;
a=NULL;
}
len=0;
//a=" ";
}
bool MyString::empty() const
{
if(len==0)
return true;
else
return false;
}
int MyString::compare(const MyString& s) const
{
int m=this->len;int n=s.len;
for(int i=0;i<m&&i<n;i++)
{
if(s.a[i]==a[i])
continue;
else if(s.a[i]<a[i])
return 1;
else
return -1;
}
return 0;
}
int MyString::compare(int index, int n, const MyString& s) const {
int m=len,k=s.len;
if(index+n>m||index+n>k)
{
cout<<"cannot compare!"<<endl;
///I dont know how to solve it
}
for(int i=index-1,j=0;i<n+index;i++,j++)
{
if(s.a[j]==a[i])
continue;
else if(s.a[j]<a[i])
return 1;
else
return -1;
}
return 0;
}
void MyString::copy(char s[], int index, int n) {
if(n>=len)
{cout<<"the maximun array exceed"<<endl;} else if(n+index-1>len)
{
cout<<"the maximun array exceed"<<endl;
return;
}
else
{
for(int i=n-1,j=0;i<n+index-1;i++,j++)
s[j]=a[i];
}
}
char* MyString::data() const
{
return a;
}
int MyString::find(char ch) const
{
for(int i=0;i<len;i++)
{
if(ch==a[i])
return i+1;
}
return 0;
}
int MyString::find(char ch, int index) const
{
if(index>len||index<1)
{
cout<<"the index num is should be 1~ "<<len<<endl;
return 0;
}
for(int i=index-1;i<len;i++)
{
if(ch==a[i])
return i+1;
}
return -1;
}
int MyString::find(const MyString& s, int index) const
{
if(index>s.len||index<1)
{
cout<<"the index num is should be 1~ "<<s.len<<endl;
return 0;
}
char ch=s.a[index-1];
for(int i=0;i<len;i++)
{
if(ch==a[i])
return i+1;
}
return 0;
}。

相关主题