使用字符数组部分实现 MyString 类,方便其他开发人员使用。
1)该题目中类似模拟 string 的操作,培养开发库的能力。
2)使用字符数组实现,不能直接调用 string 或者 CString 等类库。
3)使用 String 类示例
#include <iostream>
using namespace std;
int strlen(char *s)
{
int n = 0;
while(s[n] != 0)
n++;
return n;
}
class String
{
protected:
char *s;
public:
int getlen() { if(s==NULL) return 0;return strlen(s);}
String() {s = NULL;}
String(const char *a)
{
int len = strlen(a);
s = (char*)malloc(len+1);
for(int i=0;i<len;i++)
s[i] = a[i];
s[len] = 0;
}
String(const String &a)
{
int len = strlen(a.s);
s = (char*)malloc(len+1);
for(int i=0;i<len;i++)
s[i] = a.s[i];
s[len] = 0;
}
void operator = (const char *a);
void operator = (String a);
int index(const char *a);
int lastIndex(const char *a);
char *toUpperCase();
char *Replace(char *a,char *b);
};
void String::operator = (const char *a)
{
int len = strlen(a);
if(s != NULL)
free(s);
s = (char*)malloc(len+1);
for(int i=0;i<len;i++)
s[i] = a[i];
s[len] = 0;
}
void String::operator = (String a)
{
int len = a.getlen();
if(s != NULL)
free(s);
s = (char*)malloc(len+1);
for(int i=0;i<len;i++)
s[i] = a.s[i];
s[len] = 0;
}
int String::index(const char *a)
{
if(s==NULL)
return -1;
int len = strlen(s);
int n = strlen(a);
int i,j;
for(i=0;i<=len-n;i++)
{
for(j=0;j<n;j++)
{
if(s[i+j] != a[j])
break;
}
if(j==n)
return i;
}
return -1;
}
int String::lastIndex(const char *a)
{
if(s==NULL)
return -1;
int len = strlen(s);
int n = strlen(a);
int i,j;
for(i=len-n;i>=0;i--)
{
for(j=0;j<n;j++)
{
if(s[i+j] != a[j])
break;
}
if(j==n)
return i;
}
return -1;
}
char *String::toUpperCase()
{
if(s==NULL)
return s;
int i=0;
while(s[i] != 0)
{
if(s[i]>='a' && s[i]<='z')
s[i] -= 32;
i++;
}
return s;
}
char *String::Replace(char *a,char *b)
{
if(s==NULL)
return s;
int n = index(a);
int lena = strlen(a);
int lenb = strlen(b);
int len = strlen(s);
int i=0,j,k=0;
//
while(n>=0)
{
i=0;
k=0;
char *p = (char*)malloc(len + lenb-lena+1);
while(i<n)
{
p[i] = s[i];
i++;
}
for(j=0;j<lenb;j++)
p[i++] = b[j];
while(s[n+lena+k] != 0)
{
p[i++] = s[n+lena+k];
k++;
}
p[i] = 0;
free(s);
s = p;
n = index(a);
}
return s;
}
int main()
{
String str1 = "hello";
String str2;
String str3 = str1;
cout<<str3.index("llo")<<endl;
cout<<str3.lastIndex("llo")<<endl;
cout<<str1.toUpperCase()<<endl;
cout<<str1.Replace("L","O")<<endl;
return 0;
}