求问一个c++问题
//main.cpp
#include<iostream>
#include<str.h>
using namespace std;
int main()
{
char stra[]="ABCD";
MyString s1("abcd");
MyString s2(s1);
MyString s3(stra);
MyString s4;
s4=s3;
s1.display();
s2.display();
s3.display();
s4.display();
cout<<endl;
s3.padLeft(10, '*');
s3.display();
cout<<endl;
s4.remove(0, 3);
s4.display();
cout<<endl;
getchar();
getchar();
return 0;
}
//str.h
using namespace std;class MyString
{
private:
int len;
char *Str;
public:
int getLength()
{
return len;
}
void display()
{
cout<<Str<<endl;
cout<<len<<endl;
}
MyString()
{
len=0;
Str=NULL;
}
MyString(char a[100])
{
int i;
for(i=0;a[i]!='\0';i++)
{
Str[i]=a[i];
}
len=i-1;
}
~MyString()
{
if(Str!=NULL)
{
delete[]Str;
Str=NULL;
}
}
MyString(MyString&r)
{
len=r.len;
if(len!=0)
{
Str=new char[len+1];
strcpy(Str,r.Str);
}
}
MyString operator =(MyString r)
{
len=r.len;
if(len!=0)
{
Str=new char[len+1];
strcpy(Str,r.Str);
}
return *this;
}
MyString padLeft(int n, char padding=' ')
{
MyString strResult;
if(n!=0)
{
strResult.Str=new char[n+1];
}
int src_length = strlen(Str);
int i;
for (i = 0; i < n - src_length; ++i)
{
strResult.Str[i] = padding;
strResult.Str[len+i], Str[i];
}
strResult.len = strlen(strResult.Str);
return strResult;
}
MyString padRight(int n, char padding=' ')
{
MyString strResult;
int src_length = strlen(Str);
int i;
for (i = n; i < src_length; ++i)
{
strResult.Str[len+i] = padding;
strResult.Str[i]=Str[i];
}
strResult.len = strlen(strResult.Str);
return strResult;
}
MyString copy(int startIndex=0, int endIndex=-1)
{
MyString strResult;
int i;
if(endIndex==-1)
{
strResult.len=0;
for(i=0;i<=len;i++)
{
strResult.Str[i]=Str[i];
strResult.len++;
}
}
else
{
strResult.len=0;
for(i=startIndex;i<=endIndex;i++)
{
strResult.Str[i]=Str[i];
strResult.len++;
}
}
return strResult;
}
MyString remove(char ch)
{
MyString strResult;
int i;
strResult.len=0;
for(i=0;i<len;i++)
{
if(Str[i]!=ch)
{
strResult.Str[strResult.len] =Str[i];
strResult.len++;
}
}
return strResult;
}
MyString remove(int index)
{
MyString strResult;
int i;
for(i=0;i<len;i++)
{
if(i!=index)
{
strResult.Str[strResult.len] =Str[i];
strResult.len++;
}
}
return strResult;
}
MyString remove(int startIndex,int endIndex)
{ MyString strResult;
int i;
strResult.len=0;
for(i=0;i<startIndex;i++)
{
strResult.Str[i]=Str[i];
strResult.len++;
}
strResult.len++;
for(i=endIndex;i<=len;i++)
{
strResult.Str[strResult.len]=Str[i];
strResult.len++;
}
return strResult;
}
};
求问这个编译没错误的程序为什么运行程序会出错?
[解决办法]
#include "str.h"
str.h是你自定义的文件。<>是系统的头文件。
[解决办法]
好多错误哟,
1、 MyString(char a[100]),谁来给str分配内存?
2、 MyString operator =(MyString r) 很危险,会导致内存泄漏
等等等等