当前位置:编程学习 > C/C++ >>

如何用C++编译这个程序?

设计一个字符串类String。并能完成以下功能:

(1) 能使用+=运算符进行两个字符串的连接运算。

(2) 能使用=运算符进行两个字符串的复制。

(3) 能使用==运算符对两个字符串判断是否相等的运算。

(4) 能显示一个字符串的值。

(5) 能计算字符串的长度。

 编写相应的程序能实现上述功能,并进行测试。

分析:根据题意,需要设计的字符串类,应具有两个数据成员,即一个指向字符串的指针m_pStr和一个表示字符串长度的变量m_len.

需要的成员函数有:

(1) 对=、+=、==这三个运算符进行重载,使其能直接对两个字符串进行相应的运算;

(2) 对运算符“<<”进行重载,能直接输出String类型的数据;

(3) 能得到字符串长度的成员函数getlength();

(4) 相应的构造函数、析构函数和拷贝构造函数。

答案://完成后的String类的程序代码如下:
#include <iostream>
using namespace std;
class String
{
public:
    String();       //默认构造函数用于创建空字符串
    ~String();
    String(const String&rs);
    String(const char*const ch);  //带一个参数的构造函数用来初始化字符串
    char&operator[](unsigned short int length);
    char operator[](unsigned short int length)const;
    String&operator=(const String&s); //赋值函数用于两个字符串之间的赋值
    String operator+(const String &);
    void operator+=(const String&rs);
    friend ostream &operator<<(ostream & o, const String &str)
    {
        o<<str.str;
    return o;
    }
    friend istream &operator>>(istream&i, String &str)
    {
        i>>str.str;
        return i;
    }
    friend bool operator<(const String&str1,const String &str2)
    {
    if(strcmp(str1.str,str2.str)<0)
        return 1;
    else
        return 0;
    }
    friend bool operator>(const String&str1,const String &str2)
    {
    if(strcmp(str1.str,str2.str)>0)
        return 1;
    else
        return 0;
    }
    friend bool operator==(const String&str1,const String &str2)
    {
    if(strcmp(str1.str,str2.str)==0)
        return 1;
    else
        return 0;
    }
    unsigned short int getlen()const{return len;}
    const char*getstr()const{return str;}
private:
    String(unsigned short int);
    unsigned short int len;
    char*str;
 
};
String::String(unsigned short int length)
{
    str=new char[length+1];
    int i;
    for(i=0;i<=length;i++)
        str[i]='\0';
    len=length;
}
String::String()
{
        len=0;
    str=new char[1];
    str[0]='\0';
}
String::~String()
{
    delete []str;
    len=0;
}
String::String(const String&rs)
{
    len=rs.getlen();
    str=new char[len+1];
    for(int i=0;i<len;i++)
        str[i]=rs[i];
    str[len]='\0';
}
String::String(const char*const ch)
{
    len=strlen(ch);
    str=new char[len+1];
    for(int i=0;i<len;i++)
        str[i]=ch[i];
    str[len]='\0';
}
char&String::operator[](unsigned short int length)
{
    if(length>len)
        return str[len-1];
    else
        return str[length];
}
char String::operator[](unsigned short int length)const
{
    if (length>len)
    {
        return str[len-1];
    }
    else
        return str[length];
}
String&String::operator=(const String&s)
{
    if (this==&s)
        return *this;
    delete[]str;
    len=s.getlen();
    str=new char[len+1];
    for(int i=0;i<len;i++)
    {
        str[i]=s[i];
    }
        str[len]='\0';
        return *this;
}
String String::operator+(const String&rs)
{
    int total=len+rs.getlen();
    String temp(total);
    int i,j;
    for( i=0;i<len;i++)
        temp[i]=str[i];
    for( j=0;j<rs.getlen();j++,i++)
        temp[i]=rs[j];
    temp[total]='\0';
    return temp;
}
void String::operator+=(const String&rs)
{
    int total=len+rs.getlen();
    String temp(total);
    int i,j;
    for(i=0;i<len;i++)
        temp[i]=str[i];
    for(j=0;j<rs.getlen();j++,i++)
    temp[i]=rs[j];
    temp[total]='\0';
    *this=temp;
}
int main()
{
String s1;
    cout<<"s1的长度:"<<s1.getlen()<<endl;
    char*temp="help me";
    s1=temp;
    cout<<"s1:"<<s1.getstr()<<"\t s1的长度:"<<s1.getlen()<<endl;
    char ch[10];
    strcpy(ch,"all right");
    s1+=ch;
    cout<<"ch:\t"<<ch<<endl;
    cout<<"s1:\t"<<s1.getstr()<<endl;
    cout<<"s1:"<<s1<<endl;
    s1[2]='o';
    cout<<"s1:"<<s1<<endl;
    cout<<"s1[999]:"<<s1[999]<<endl;
    String s2="mother";
    String s3("Mother");
    cout<<"s2:"<<s2<<"\t s3:"<<s3<<endl;
    String s4=s2+s3;
    cout<<"s2+s3="<<s4<<endl;
    int check=s2>s3;
    cout<<"s2>s3:"<<check<<endl;
    check=s2<s3;
    cout<<"s2<s3:"<<check<<endl;
    check=s2==s2;
    cout<<"s2==s2:"<<check<<endl;
    cin>>s2[0]>>s3[0];
    s2=s2+s3;
    cout<<"s2:"<<"\t"<<s2<<endl;
    return 0;
}
希望对你有帮助。

上一个:为什么C++教程这么少啊
下一个:The difference between C++ and java.

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,