64,666
社区成员
发帖
与我相关
我的任务
分享
class String {istream& operator>> ( istream& is, String& s )
{
const istream::sentry ok( is );
if( ok ) {
char c = is.rdbuf()->sgetc();
size_t _size = UINT_MAX;
s.make_empty( );
for( ; 0 < _size && !is.eof(); --_size, c = is.rdbuf()->snextc() )
if( isspace( c ) ) // skip whitespace
break;
else
s.append( c ); // 自己实现append
}
return is;
}
这样就应该可以
istream &operator>>(istream &i, String &s)
{
char str[100];
i >> str;
int length = strlen(str);
delete s.m_cData;
s.m_cData = new char[length+1];
strcpy(s.m_cData, str);
return i;
}
#include <iostream>
#include <string.h>
using namespace std;
#define SAFE_DELETE(p) { if(p!=0){delete p; p = NULL;}}
class String
{
friend istream& operator>> ( istream& is, String& s )
{
char cInput[128];
is>>cInput;
s.m_length=strlen(cInput);
s.m_data=new char[s.m_length+1];
strcpy(s.m_data, cInput);
return is;
}
friend ostream& operator<< ( ostream& os, String& s )
{
os<<s.m_data<<endl;
return os;
}
public:
String():m_data(NULL), m_length(0)
{}
String( const char* s ):m_length(strlen(s)), m_data(NULL)
{
m_data=new char[m_length+1];
strcpy(m_data, s);
}
String( const String& s ):m_length(s.Getlength()), m_data(NULL)
{
m_data=new char[m_length+1];
strcpy(m_data, s.m_data);
}
~String()
{
SAFE_DELETE(m_data);
m_length=0;
}
size_t Getlength() const { return m_length; }
private:
char* m_data;
size_t m_length;
};
int main()
{
String test;
cin>>test;
cout<<test.Getlength()<<endl;
cout<<test;
return 0;
}