回 帖 发 新 帖 刷新版面

主题:第一次使用运算符重载,出现大量错误,希望大家可以帮帮忙修改。

    编写一个程序,使用类存储字符集合,可以用运算符添加删除字符,也可以用运算符将两个集合相加、相减。
    下面为我自己编写的程序,出现了24个错误。

#include<iostream>
#include<cstring>
using namespace std;
class Set{
char len[10];
public:
bool isMember(char word);
Set operator+(Set set2);
Set operator-(Set set2);
Set operator+(char word);
Set operator-(char word);
void show(){
int i;
for(i=0;len[i];i++)cout<<len[i];
cout<<"\n";
}
};
bool Set::isMember(char word){
int i;
for(i=0;len[i];i++){
if(word==len[i]){
cout<<"字符集合中已含有此字符。"<<"\n";
return false;
}
}
cout<<"字符集合中没含有此字符。"<<"\n";
return true;
}
Set::operator+(char word){
int i;
i=strlen(len);
if(isMember(word))len[i]=word;
return *this;
}
Set::operator-(char word){
int i,t[10],n=0;
if(!isMember(word)){
for(i=0;len[i];i++){
if(len[i]==word){
t[n]=i;
n++;
}
}
for(n;n>=0;n--){
for(t[n];len[t[n]];t[n]++)len[t[n]]=len[t[n]+1];
}
}
return *this;
}
Set::operator+(Set set2){
Set set3;
int i,t;
for(i=0;len[i];i++)set3.len[i]=len[i];
for(t=0;set2.len[t];t++)set3+set2.len[t];

return set3;
}
Set::operator-(Set set2){
Set set3;
int i,t;
for(i=0;len[i];i++)set3.len[i]=len[i];
for(i=0;set2.len[i];i++)set3-set2.len[i];
return set3;
}
int main(){
Set set1,set2,set3,set4;
set1+'a'+'b'+'c'+'d';
set1.show();
set2+'c'+'d'+'e'+'f';
set2.show();
set1-'a';
set1.show();
set2-'c';
set2.show();
set3=set1+set2;
set3.show();
set4=set1-set2;
set4.show();
return 0;
}

回复列表 (共15个回复)

11 楼

那现在呢?
改了没有?
改了后还有没有错误?
我已经在QQ上加你了,怎么不通过我的验证?

那不是文件,是编译开关。
用于适用不同的编译器,这不是为了方便你吗?
你不懂就照做好了。
以后你会慢慢懂得。

12 楼

    经过版主的帮助修改,下面程序已能成功运行。
#include<iostream>
#include<cstring>
using namespace std;
class Set{
char len[10];
public:
Set(){len[0]=0;}
bool isMember(char word);
Set operator+(Set set2);
Set operator-(Set set2);
Set &operator+(char word);
Set &operator-(char word);
Set operator=(Set set2);
void show(){
int i;
for(i=0;len[i];i++)cout<<len[i];
cout<<"\n";
return ;
}
};
bool Set::isMember(char word){
int i;
for(i=0;len[i];i++){
if(word==len[i])return true;
}
return false;
}
Set Set::operator=(Set set2){
int i;
for(i=0;set2.len[i];i++)len[i]=set2.len[i];
len[i]=0;
return (*this);
}
Set &Set::operator+(char word){
int i;
i=strlen(len);
if(!isMember(word))len[i]=word;
len[i+1]=0;
return *this;
}
Set &Set::operator-(char word){
int i;
for(i=0;len[i];i++){
if(len[i]==word){
for(;len[i];i++){
len[i]=len[i+1];
}
break;
}
}
return *this;
}
Set Set::operator+(Set set2){
Set set=*this;
int i;
for(i=0;set2.len[i];i++)set+set2.len[i];
return set;
}
Set Set::operator-(Set set2){
Set set=*this;
int i;
for(i=0;set2.len[i];i++)set-set2.len[i];
return set;
}
int main(){
Set set1,set2,set3,set4;
set1+'a'+'b'+'c'+'d';
set1.show();
set2+'c'+'d'+'e'+'f';
set2.show();
set1-'a';
set1.show();
set2-'c';
set2.show();
set3=set1+set2;
set3.show();
set4=set1-set2;
set4.show();
return 0;
}

13 楼

5555~~我是菜鸟~`你们的程序我基本看不懂啊~`
真想能有你们的水平~`好羡慕~

14 楼

说实话,到最后那个程序,还是都是错误。
好好去看看ECpp,这种常识错误不应该犯的。

15 楼

楼上请明言!

我来回复

您尚未登录,请登录后再回复。点此登录或注册