ccdd数据库:谁能帮我写这个程序,满意再加100

来源:百度文库 编辑:中科新闻网 时间:2024/04/29 04:49:02
下面是一个使用字符串类CString 的程序实例及结果,请设计并完成字符串类CString
#include <iostream.h>
void main ()
{
CString s1 (“Hang”), s2(“ Zhou”);
CString s3;

s3 = s1 + s2;
CString s4 (s3);
s4 [4] = ‘+’;
cout << “s1 = “ << s1 << endl;
cout << “s2 = “ << s2 << endl;
cout << “s3 = “ << s3 << endl;
cout << “s4 = “ << s4 << endl;

}
执行结果 :
s1=Hang
s2= Zhou
s3=Hang Zhou
s4=Hang+Zhou
要用c++写的

其实就是难在重载运算符,呵呵,这个不怎么常用,所以,可能运行时会有些许毛病,但是方法还是可行的,你可以在我下面的代码中修改。由于没有达到楼主的要求,故在此,只做参考了啊~!~~~~~~

#include <iostream>
#include <string.h>
#include <stdlib.h>
using namespace std;
class CString
{
private:
char *str;
int len;
public:
CString();
CString(const CString &str);
CString(const char *);
~CString() { delete[] this->str;}
int length() { return this->len;}
CString &operator+(const CString &);
CString &operator=(const CString &);
CString &operator+=(const CString &);
CString &operator+=(const char *);
int operator==(const CString &str);
int operator<(CString &str);
int operator>(CString &str);
int operator!();
char &operator[](int);
friend ostream &operator<<(ostream &output, CString &str)
{ return output << '"' << str.str << '"' << " ";}
};
CString::CString()
{
this->len = 0;
}
CString::CString(const CString &str)
{
this->len = str.len;
this->str = new char[this->len+1];
if(! this->str) exit(1);
strcpy(this->str, str.str);
}
CString::CString(const char *c)
{
this->len = strlen(c);
this->str = new char[this->len+1];
if(! this->str) exit(1);
strcpy(this->str, c);
}
CString &CString::operator+(const CString &str)
{
char *tmp = this->str;
this->len += str.len;
this->str = new char[this->len+1];
if(! this->str) exit(1);
strcpy(this->str, tmp);
strcat(this->str, str.str);
delete[] tmp;
return *this;
}
CString &CString::operator=(const CString &str)
{
CString tmp(str);
CString &t = tmp;
return t;
}
CString &CString::operator+=(const CString &str)
{
char *tmp = this->str;
this->len += str.len;
this->str = new char[this->len+1];
if(! this->str) exit(1);
strcpy(this->str, tmp);
strcat(this->str, str.str);
delete[] tmp;
return *this;
}
CString &CString::operator+=(const char *c)
{
char *tmp = this->str;
this->len += strlen(c);
this->str = new char[this->len+1];
if(! this->str) exit(1);
strcpy(this->str, tmp);
strcat(this->str, c);
delete[] tmp;
return *this;
}
int CString::operator==(const CString &str)
{
return strcmp(this->str, str.str) == 0;
}
int CString::operator<(CString &str)
{
return strcmp(this->str, str.str) < 0;
}
int CString::operator>(CString &str)
{
return strcmp(this->str, str.str) > 0;
}
int CString::operator!() { return this->len == 0;}
char &CString::operator[](int i)
{
if(this->len < i || i < 0) exit(1);
char &t = this->str[i];
return t;
}

哎,可惜现在机子上没有C++,这么简单的程序……

为什么不自已写呢?

很简单的程序,重载几个构造及运算符就OK了,自己写吧,要不水平上不去的。
给你点我的建议:(要实现的接口函数列表)
Cstring();
Cstring(Cstring&);
Cstring(const char*);
void operator[](int);
Cstring& operator=(Cstring&);

Cstring operator+(Cstring&,Cstring&);
ostream& operator<<(ostream&,Cstring&)

s3 = s1 + s2; 可以这么赋值吗?不得用STRCPY吗?