请教C++高手
模拟C++标准库中的string容器实现string类支持下列程序:intmain(){strings1,s2,s3;cin>>s1>>s2;s3=s1+s2;cout<...
模拟C++标准库中的string容器 实现string类 支持下列程序:
int main()
{
string s1,s2,s3;
cin>>s1>>s2;
s3=s1+s2;
cout<<s3<<endl;
for(int i=0;i<s3.length();i++)
cout<<s3[i];
cout<<endl;
//
比较两个字符串的大小 按字符的顺序
if(s1>s2)
cout<<s1<<"is more lager than"<<s2<<endl;
cout<<s3.find(s2);
return 0;
}
要求:完成string类的构造函数,拷贝构造函数,析构函数,赋值运算符,比较运算符,加法运算符,流操作符,find函数,length函数,下标运算符 展开
int main()
{
string s1,s2,s3;
cin>>s1>>s2;
s3=s1+s2;
cout<<s3<<endl;
for(int i=0;i<s3.length();i++)
cout<<s3[i];
cout<<endl;
//
比较两个字符串的大小 按字符的顺序
if(s1>s2)
cout<<s1<<"is more lager than"<<s2<<endl;
cout<<s3.find(s2);
return 0;
}
要求:完成string类的构造函数,拷贝构造函数,析构函数,赋值运算符,比较运算符,加法运算符,流操作符,find函数,length函数,下标运算符 展开
展开全部
你可以好好地利用标准库里的 vector 类和 algorithm 里的一些演算法来大幅度地降低这项任务的难度:
(我没写拷贝构造函数、析构函数和赋值运算符,因为这个情况下编译器自动提供的不会造成问题)
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
class myString : private vector<char> {
public:
myString( ) { }
myString( char *cStr ) { assign( cStr, cStr + strlen( cStr ) ); }
char operator[ ]( size_t i ) const { return vector<char>::operator[ ]( i ); }
bool operator>( const myString& other ) const { return ! ( *this <= other ); }
bool operator<( const myString& other ) const { return ! ( *this >= other ); }
bool operator==( const myString& other ) const { return ! ( *this != other ); }
size_t length( ) const { return size( ); }
static const size_t npos;
size_t find( const myString& other ) const {
const_iterator ci =
search( begin( ), end( ), other.begin( ), other.end( ) );
return ci == end( ) ? npos : ci - begin( );
}
myString operator+( const myString& other ) const {
myString tmp( other );
tmp.insert( tmp.begin( ), begin( ), end( ) );
return tmp;
}
friend istream& operator>>( istream& is, myString& mys ) {
mys.clear( );
is >> ws;
for ( char c; ! ( isspace( is.peek( ) ) || is.eof( ) ); )
is.get( c ), mys.push_back( c );
return is;
}
friend ostream& operator<<( ostream& os, const myString& mys ) {
copy( mys.begin( ), mys.end( ), ostream_iterator<char>( os ) );
return os;
}
};
// Too bad, all static data members must be initialized at file scope.
const size_t myString::npos = -1;
///////////////////////////////////////////////////////////////////////////////
int main( ) {
myString s1, s2, s3;
cin >> s1 >> s2;
s3 = s1 + s2;
cout << s3 << endl;
for ( size_t i = 0; i < s3.length( ); i++ )
cout << s3[ i ];
cout << endl;
// 比较两个字符串的大小 按字符的顺序
if( s1 > s2 )
cout << s1 << " is lexicographically lager than " << s2 << endl;
cout << s3.find( s2 );
return 0;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询