#include<iostream>
using namespace std;
class MyString{
private:
char *str=new char[10];
public:
MyString(){*str='\0';} //default constructor
MyString(char *s){ //parameterized constructor
str=s;
}
private:
int length(char* s){
int i=0;
while(s[i]!='\0')
i++;
return i;
}
char* delchar(char* s,int count,int start){
int i,j=0;
char *temp= new char[10];
for(i=start;i<start+count;i++){
s[i]=' ';
}
for(i=0;i<length(s);i++){
if(s[i]!=' ')
temp[j++]=s[i];
}
s=temp;
return s;
}
public:
MyString operator-(MyString s){
int i=0,j=0,count=0,start=-1;/* i to iterate the first string,j to iterate the second string*/
MyString temp; /* count to count the matched characters ,start to know the starting index*/
temp.str=str;
while(temp.str[i]!='\0'){
j=0;
start++;
while(s.str[j]!='\0'){
if(temp.str[i]==s.str[j]){
count++;
i++;
j++;
if(count==length(s.str)){//checks if the count
temp.str=delchar(temp.str,count,start);
i=i-count;
start=i-1;
count=0;
}
}
else{
i++;
count=0;
break;
}
}
}
return temp;
}
~MyString(){
delete str;
}
friend ostream &operator<<(ostream &stream,MyString& s){
stream<<s.str<<endl;
return stream;
}
};
int main(){
char *p= new char[20];
char *q= new char[10];
cin>>p;
cin>>q;
MyString s1(p);
MyString s2(q);
MyString s3;
s3=s1-s2;
cout<<s3;
delete p;
delete q;
return 0;
}
返回null上面的代碼重載 - 操作者。它試圖從例如INPUT1主串減去子:joshmathews輸入2:約什輸出:馬修斯。我正在嘗試將輸出存儲在新的MyString對象s3中。當我使用如上所示的析構函數時,輸出s3 返回null。但是當我不使用析構函數時,我會得到預期的輸出結果。任何人都可以幫忙?<<操作符重載使用析構函數
請了解構造函數初始化列表。這段代碼有一個可怕的,可怕的內存錯誤。 – 2014-09-04 06:59:08
也請了解std :: string,畢竟這應該是C++ – stijn 2014-09-04 07:01:42
函數'delchar'完全是「脫鉤」的人。 – 2014-09-04 07:03:13