#include<iostream>
#include<string>
using namespace std;
class String
{
char * data;
public:
String();
String(const char * pStr);
~String()
{delete [] data;}
void Input();
void Output1(int);
void Output2(int);
String(const String & str);
int GetLength() const;
int Find(char , int ) const;
void SubStr(int ,int);//返回从begin位置起,长度为size的子字符串(size缺省为剩余所有长度,begin缺省为字符串开头)
};
String::String(const char *pStr)
{
if (pStr)
{
data = new char[strlen(pStr) + 1];
strcpy(data, pStr);
}
else
{
data = new char[1];
*data = '\0';
}
}
void String::Input()
{
int m;
char c1[1024];
cout<<"请输入Email地址:";
cin>>c1;
m = strlen(c1);
delete [] data;
data = new char[m + 1];
strcpy(data,c1);
}
void String::Output1(int begin)
{
for(int i=0;i<begin;i++)
{
cout<<*data;
data++;
}
cout<<endl;
data=data-begin;
}
void String::Output2(int begin)
{
cout<<data<<endl;
}
String::String(const String & str1)
{
data = str1.data;
}
int String::GetLength() const
{
return (strlen(data));
}
int String::Find(char ch, int begin = 0) const
{
const char *p = data;
while(*p != ch && *p != '\0')
{
begin ++;
p ++;
}
if(*p == '\0')
{
return -1;
}
else
return (begin);
}
void String::SubStr(int begin = 0,int size = -1)
{
data = data + begin + 1;
}
int main()
{
char c[]="str";
int n, begin, size;
String str1(c);
str1.Input();
String str2(str1);
String str3(str1);
n = str1.GetLength();
begin = str1.Find('@');
while(begin == -1)
{
cout<<"输入错误!"<<endl;
str1.Input();
str2=str1;
n = str1.GetLength();
begin = str1.Find('@');
}
cout<<"该字符串长度为:"<<n<<endl;
cout<<"该地址的用户名:";
str1.Output1(begin);
size = n - begin - 1;
str3.SubStr(begin,size);
cout<<"该地址的服务器名:";
str3.Output2(begin);
}
系统出示的错误原因
for information on how your program can cause an assertion failure ,see the C++ documentation on asserts