您的位置 首页 > 娱乐休闲

C\C++语言24|综合理解类:字符串类的自定义

来看看C++的string类是如何实现的,里面涵盖了C++的诸多知识点。

1 头文件my

#ifndef MY_STRING_H_ #define MY_string_H_ #include <io; /* * The next line is used because Codewarrior has a conflict with * the STL string. Make sure to put the #include of this file * AFTER all the system includes. */ #define string String class StringIndexOutOfBounds { }; class string { public: string( const char *cstring = "" ); // Constructor string( const string & str ); // Copy constructor ~string( ) // Destructor { delete [ ] buffer; } const string & operator= ( const string & rhs ); // Copy const string & operator+=( const string & rhs ); // Append const char *c_str( ) const // Return C-style string { return buffer; } int length( ) const // Return string length { return strlength; } char operator[]( int k ) const; // Accessor operator[] char & operator[]( int k ); // Mutator operator[] enum { MAX_LENGTH = 1024 }; // Maximum length for input string private: char *buffer; // storage for characters int strLength; // length of string (# of characters) int bufferLength; // capacity of buffer }; ostream & operator<<( ostream & out, const string & str ); // Output istream & operator>>( istream & in, string & str ); // Input istream & getline( istream & in, string & str ); // Read line bool operator==( const string & lhs, const string & rhs ); // Compare == bool operator!=( const string & lhs, const string & rhs ); // Compare != bool operator< ( const string & lhs, const string & rhs ); // Compare < bool operator<=( const string & lhs, const string & rhs ); // Compare <= bool operator> ( const string & lhs, const string & rhs ); // Compare > bool operator>=( const string & lhs, const string & rhs ); // Compare >= #endif

2 实现文件my

#include <> #include "my" string::string( const char * cstring ) { if( cstring == NULL ) cstring = ""; strLength = strlen( cstring ); bufferLength = strLength + 1; buffer = new char[ bufferLength ]; strcpy( buffer, cstring ); } string::string( const string & str ) { strLength = ( ); bufferLength = strLength + 1; buffer = new char[ bufferLength ]; strcpy( buffer, ); } const string & string::operator=( const string & rhs ) { if( this != &rhs ) { if( bufferLength < r( ) + 1 ) { delete [ ] buffer; bufferLength = r( ) + 1; buffer = new char[ bufferLength ]; } strLength = r( ); strcpy( buffer, r ); } return *this; } const string & string::operator+=( const string & rhs ) { if( this == &rhs ) { string copy( rhs ); return *this += copy; } int newLength = length( ) + r( ); if( newLength >= bufferLength ) { bufferLength = 2 * ( newLength + 1 ); char *oldBuffer = buffer; buffer = new char[ bufferLength ]; strcpy( buffer, oldBuffer ); delete [ ] oldBuffer; } strcpy( buffer + length( ), r ); strLength = newLength; return *this; } char & string::operator[ ]( int k ) { if( k < 0 || k >= strLength ) throw StringIndexOutOfBounds( ); return buffer[ k ]; } char string::operator[ ]( int k ) const { if( k < 0 || k >= strLength ) throw StringIndexOutOfBounds( ); return buffer[ k ]; } ostream & operator<<( ostream & out, const string & str ) { return out << (); } istream & operator>>( istream & in, string & str ) { char buf[ string::MAX_LENGTH + 1 ]; in >> buf; if( !in.fail( ) ) str = buf; return in; } istream & getline( istream & in, string & str ) { char buf[ string::MAX_LENGTH + 1 ]; in.getline( buf, string::MAX_LENGTH ); if( !in.fail( ) ) str = buf; return in; } bool operator==( const string & lhs, const string & rhs ) { return strcmp( l( ), r( ) ) == 0; } bool operator!=( const string & lhs, const string & rhs ) { return strcmp( l( ), r( ) ) != 0; } bool operator<( const string & lhs, const string & rhs ) { return strcmp( l( ), r( ) ) < 0; } bool operator<=( const string & lhs, const string & rhs ) { return strcmp( l( ), r( ) ) <= 0; } bool operator>( const string & lhs, const string & rhs ) { return strcmp( l( ), r( ) ) > 0; } bool operator>=( const string & lhs, const string & rhs ) { return strcmp( l( ), r( ) ) >= 0; }

-End-

责任编辑: 鲁达

1.内容基于多重复合算法人工智能语言模型创作,旨在以深度学习研究为目的传播信息知识,内容观点与本网站无关,反馈举报请
2.仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证;
3.本站属于非营利性站点无毒无广告,请读者放心使用!

“C\C++语言24|综合理解类字符串类的自定义”边界阅读