泰拉星环小艾邪恶图片:请教C++高手

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/29 04:19:05
模拟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函数,下标运算符

 
 
 
你可以好好地利用标准库里的 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;
}