要写string类,完成运算符+-,不能用<cstring>我写完了,但是具体的问题不知道怎么解决求高手帮帮忙 5
#include<iostream>usingnamespacestd;classString{public:String(char*str);//基本构造函数intst...
#include <iostream>
using namespace std;
class String{
public:
String(char *str);//基本构造函数
int strlen(char *str);//长度函数
int strcmp(char*str1, char*str2);//比较函数
char strcpy(char *str1, char *str2);//覆盖置值函数
String(const char*);//利用const来初始化
String(const String&);//拷贝构造函数
String operator=(String &str2);//运算符重载等号,实现赋值函数
friend String operator+(String &str1,String &str2);//运算符重载加减,实现字符串的连接和删减功能
friend String operator-(String &str1,String &str2);
friend istream& operator>>(istream& in,String&);//声明友元函数输入输出流
friend ostream& operator<<(ostream& out,String&);
~String();//析构函数
private:
char *data;
};
String::String(char *str)//类似平常类的Set函数,构造函数
{
if(str==NULL)
{
data=new char[1];//如果str指向的是空地址,则对data分配一新地址
data[0]='\0';//并且在首地址放置结束符'/0'
}
else
int lenth=strlen(str);
data=new char[lenth+1];
strcpy(data,str);//如果不是则表明要用str做初值赋给data
}
String::String(const String& str2)//拷贝构造函数
{
int lenth=strlen(str2.data);
data=new char[lenth+1];
strcpy(data,str2.data);
cout<<"调用了拷贝构造函数"<<endl;
}
String::~String()//析构函数,释放空间
{
delete[]data;
}
String::strlen(char *str)
{
char *p=str;
while(*p) //从str的首地址一直指到str结尾的\0
++p;
return p-str; //相对位置求出字符串str的长度
}
String::strcpy(char *str1, char *str2)
{
while((*str2)!='\0')
*(str1++)=*(str2++);//覆盖赋值
*str1='\0';//添加结束符
return str1;
}
String operator+(String &str1,String &str2)
{
int i=0,k=0;
while(str1[i]) i++;//从开始到最后,制造连接点
while(str2[k]) str1[i++]=str2[k++];
str1[i]='\0';
return str1;
}
String::strcmp(char*str1, char*str2)
{
while(*str1 && *str2)
{
if(*str1>*str2) return 1;
if(*str1<*str2) return -1;
str1++;
str2++;
}
String::String operator=(String &str2)
{
int lenth=strlen(str2.data);
data=new char[lenth+1];
strcpyy(data,str2.data);
}
istream& operator>>(istream& in,String& str);//声明友元函数输入输出流
{
in>>str.data;
return in;
}
ostream& operator<<(ostream& out,String& str);
{
out<<str.data;
return out;
}
int main()
{
String str1,str2,str3;
char symbol;
cout<<"please input +-"<<endl;
cin>>symbol;//利用switch做外包装
switch(symbol)
{
case'+': str3=str1+str2; cout<<"sum="<<str3<<endl;break;
case'-': str3=str1-str2; cout<<"sub="<<str3<<endl;break;
default: cout<<"error! please choose exactly..."<<endl;
}
return 0;
} 展开
using namespace std;
class String{
public:
String(char *str);//基本构造函数
int strlen(char *str);//长度函数
int strcmp(char*str1, char*str2);//比较函数
char strcpy(char *str1, char *str2);//覆盖置值函数
String(const char*);//利用const来初始化
String(const String&);//拷贝构造函数
String operator=(String &str2);//运算符重载等号,实现赋值函数
friend String operator+(String &str1,String &str2);//运算符重载加减,实现字符串的连接和删减功能
friend String operator-(String &str1,String &str2);
friend istream& operator>>(istream& in,String&);//声明友元函数输入输出流
friend ostream& operator<<(ostream& out,String&);
~String();//析构函数
private:
char *data;
};
String::String(char *str)//类似平常类的Set函数,构造函数
{
if(str==NULL)
{
data=new char[1];//如果str指向的是空地址,则对data分配一新地址
data[0]='\0';//并且在首地址放置结束符'/0'
}
else
int lenth=strlen(str);
data=new char[lenth+1];
strcpy(data,str);//如果不是则表明要用str做初值赋给data
}
String::String(const String& str2)//拷贝构造函数
{
int lenth=strlen(str2.data);
data=new char[lenth+1];
strcpy(data,str2.data);
cout<<"调用了拷贝构造函数"<<endl;
}
String::~String()//析构函数,释放空间
{
delete[]data;
}
String::strlen(char *str)
{
char *p=str;
while(*p) //从str的首地址一直指到str结尾的\0
++p;
return p-str; //相对位置求出字符串str的长度
}
String::strcpy(char *str1, char *str2)
{
while((*str2)!='\0')
*(str1++)=*(str2++);//覆盖赋值
*str1='\0';//添加结束符
return str1;
}
String operator+(String &str1,String &str2)
{
int i=0,k=0;
while(str1[i]) i++;//从开始到最后,制造连接点
while(str2[k]) str1[i++]=str2[k++];
str1[i]='\0';
return str1;
}
String::strcmp(char*str1, char*str2)
{
while(*str1 && *str2)
{
if(*str1>*str2) return 1;
if(*str1<*str2) return -1;
str1++;
str2++;
}
String::String operator=(String &str2)
{
int lenth=strlen(str2.data);
data=new char[lenth+1];
strcpyy(data,str2.data);
}
istream& operator>>(istream& in,String& str);//声明友元函数输入输出流
{
in>>str.data;
return in;
}
ostream& operator<<(ostream& out,String& str);
{
out<<str.data;
return out;
}
int main()
{
String str1,str2,str3;
char symbol;
cout<<"please input +-"<<endl;
cin>>symbol;//利用switch做外包装
switch(symbol)
{
case'+': str3=str1+str2; cout<<"sum="<<str3<<endl;break;
case'-': str3=str1-str2; cout<<"sub="<<str3<<endl;break;
default: cout<<"error! please choose exactly..."<<endl;
}
return 0;
} 展开
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询