00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include "tstring.h"
00021
00022 #include <string>
00023
00024 TString::TString( const char * cstr )
00025 {
00026
00027 actual_string = NULL;
00028
00029
00030 *this = cstr;
00031 }
00032
00033 TString::TString( const TString & tstr )
00034 {
00035
00036 actual_string = NULL;
00037
00038
00039 *this = (const char *)tstr;
00040 }
00041
00042 TString::~TString( void )
00043 {
00044 if( actual_string )
00045 delete[] actual_string;
00046 }
00047
00048 int TString::Length( void ) const
00049 {
00050 if( actual_string )
00051 return strlen( actual_string );
00052 return 0;
00053 }
00054
00055 int TString::IndexOf( const char ch ) const
00056 {
00057 register int i;
00058 const register int N = Length( );
00059
00060 for( i = 0; i < N; i++ )
00061 {
00062 if( actual_string[ i ] == ch )
00063 return i;
00064 }
00065
00066 return -1;
00067 }
00068
00069 int TString::IndexOf( const char * cstr ) const
00070 {
00071 register int i,
00072 j;
00073
00074 if( cstr )
00075 {
00076 const register int N = Length( ),
00077 M = strlen( cstr );
00078
00079 for( i = 0, j = 0; i < N && j < M; i++, j++ )
00080 {
00081 while( actual_string[ i ] != cstr[ j ] )
00082 {
00083 i -= j-1;
00084 j = 0;
00085 }
00086 }
00087 if( j == M )
00088 return i-M;
00089 }
00090
00091 return -1;
00092 }
00093
00094 int TString::LastIndexOf( const char ch ) const
00095 {
00096 register int i;
00097
00098 for( i = Length( )-1; i >= 0; i-- )
00099 {
00100 if( actual_string[ i ] == ch )
00101 return i;
00102 }
00103 return -1;
00104 }
00105
00106 const TString TString::Substring( int begin ) const
00107 {
00108 TString tstr;
00109
00110 if( begin < Length( ) )
00111 tstr = actual_string + begin;
00112
00113 return tstr;
00114 }
00115
00116 const TString TString::Substring( int begin, int end ) const
00117 {
00118 TString tstr;
00119 char * temp_string;
00120
00121 if( begin < Length( ) && end > begin && end < Length( ) )
00122 {
00123 temp_string = new char[ end - begin + 2 ];
00124 strncpy( temp_string, actual_string + begin, end-begin+1 );
00125 tstr = temp_string;
00126 delete[] temp_string;
00127 }
00128
00129 return tstr;
00130 }
00131
00132 bool TString::BeginsWith( const char * prefix ) const
00133 {
00134 if( prefix == NULL )
00135 return false;
00136 return (strncmp( actual_string, prefix, strlen(prefix) ) == 0);
00137 }
00138
00139 void TString::Format( const char * format, ... )
00140 {
00141 va_list params;
00142 char string[ 256 ];
00143
00144 va_start( params, format );
00145 vsprintf( string, format, params );
00146 va_end( params );
00147
00148 *this = string;
00149 }
00150
00151
00152 const TString & TString::operator = ( const char * cstr )
00153 {
00154 if( actual_string )
00155 {
00156 delete actual_string;
00157 actual_string = NULL;
00158 }
00159
00160 if( cstr )
00161 {
00162 actual_string = new char[ strlen( cstr ) + 1 ];
00163 strcpy( actual_string, cstr );
00164 }
00165
00166 return *this;
00167 }
00168
00169 const TString & TString::operator = ( const TString & tstr )
00170 {
00171 return (*this = (const char *)tstr);
00172 }
00173
00174 const TString & TString::operator += ( const char * cstr )
00175 {
00176 char * temp_string;
00177
00178 if( cstr )
00179 {
00180 temp_string = new char[ Length( ) + strlen( cstr ) + 1 ];
00181
00182 if( actual_string )
00183 {
00184 strcpy( temp_string, actual_string );
00185 delete[] actual_string;
00186 }
00187
00188 strcat( temp_string, cstr );
00189 actual_string = temp_string;
00190 }
00191
00192 return *this;
00193 }
00194
00195 const TString & TString::operator += ( const TString & tstr )
00196 {
00197 return (*this += (const char *)tstr);
00198 }
00199
00200 const TString operator + ( const TString & tstr1, const TString & tstr2 )
00201 {
00202 TString temp_tstr( tstr1 );
00203
00204 temp_tstr += tstr2;
00205
00206 return temp_tstr;
00207 }
00208
00209 bool operator == ( const TString & tstr1, const TString & tstr2 )
00210 {
00211 if( (const char *)tstr1 == NULL || (const char *)tstr2 == NULL )
00212 return false;
00213 return ( strcmp( (const char *)tstr1, (const char *)tstr2 ) == 0 );
00214 }
00215
00216 bool operator != ( const TString & tstr1, const TString & tstr2 )
00217 {
00218 if( (const char *)tstr1 == NULL || (const char *)tstr2 == NULL )
00219 return true;
00220 return ( strcmp( (const char *)tstr1, (const char *)tstr2 ) != 0 );
00221 }