国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

自定義類_string類

2019-11-17 05:41:02
字體:
來源:轉載
供稿:網友

////////////////////////////////////////////////////////////
// string類源程序
// 時間: 2005-11-2
// 程序員: 黃江斌( blog主頁 http://blog.csdn.net/zerodspace
// 開發平臺: VC++6.0<<單文件程序>>
////////////////////////////////////////////////////////////


#include "iostream.h"

////////////////////////////////////////////////////////////
// string類聲明部分
// 時間: 2005-11-2
// 程序員: 黃江斌
////////////////////////////////////////////////////////////
#include "string.h"
#define TRIM_LEFT 1
#define TRIM_RIGHT 2
#define TRIM_BOTH 0

class string
{
public:
string();
string( const char *src );
string( string &src );
~string();
//操作符重載
void Operator = ( const char *src );
//char * operator + ( string &add2 );
string operator + ( string &add2 );
operator char *();
//成員函數
const char *ToString();
char GetAt( int index );
int Len();
int FindFirstSub( string substr , int start );
bool InStr( string substr );
string Trim( int part );
string Left( int sublen );
string Right( int sublen );
string Mid( int start , int sublen );
void Replace( string strNeedReplaced , string strReplace );

PRivate:
char *str;
int len;
};
////////////////////////////////////////////////////////////
// string類實現部分
// 時間: 2005-11-2
// 程序員: 黃江斌
////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////
// string在構造、析構函數
// string()
// string( const char *src )
// string( string &src )
// ~string()

string::string()
{
len = 0;
str = new char(len+1);
str[0] = 0;
}
string::string( const char *src )
{
len = strlen(src);
str = new char(len+1);
strcpy( str , src );
}
string::string( string &src )
{
len = src.Len();
str = new char(len+1);
strcpy( str , (char*)src );
}
string::~string()
{
}

////////////////////////////////////////////////////////////
// string類操作符重載
// string operator = ( const char *src )
// string operator + ( string &add2 )
// operator char *()

void string::operator = ( const char *src )
{
len = strlen(src);
str = new char(len+1);
strcpy( str , src );
}
string string::operator + ( string &add2 )
{
int len2 = add2.Len();
int len0 = len + len2;
char *str0 = new char(len0+1);
strcpy( str0 , str );
strcat( str0 , (char*)add2 );
string sum(str0);
return sum;
}
string::operator char *()
{
return str;
}

////////////////////////////////////////////////////////////
// string類功能函數
// const char *ToString()
// char GetAt( int index )
// int Len()
// int FindFirstSub( string substr , int start = 0 )
// bool InStr( string substr )
// string Trim( int part )
// string Left()
// string Right()
// string Mid()
// void Replace( string strNeedReplaced , string strReplace )

const char *string::ToString()
{
return str;
}
//
//得到內存編號為index的字符
char string::GetAt( int index )
{
return str[index];
}
//
//得到字符串的長度
int string::Len()
{
return len;
}
//
//得到start后(包括start)子串substr的內存編號
int string::FindFirstSub( string substr , int start = 0 )
{
if( start > len )
  return -1;
for( int i = start ; i <= len - substr.Len() ; i++ )
{
  if( str[i] == substr.GetAt(0) )
  {
   bool flag = true;
   int j;
   for( j = 0 ; flag && j < substr.Len() && (i + j < len) ; j++ )
   {
    if( str[i+j] != substr.GetAt(j) )
     flag = false;
   }
   if( j >= substr.Len() && flag )
   {
    return i;
   }
  }
}
return -1;
}
//
//判定字符串substr是否字符串的子串
bool string::InStr( string substr )
{
if( FindFirstSub( substr ) < 0 )
  return false;
else
  return true;
}
//
//去前導、后導空格
string string::Trim( int part = TRIM_BOTH )
{
string s = *this;
char *temp = new char(Len()+1);
int i , j , k;

if( part == TRIM_LEFT part == TRIM_BOTH )
{
  j = 0;
  while( s.GetAt(j) == '' '' && j < s.Len() )
   j++;
  k = s.Len();
  i = 0;
  while( j <= k )
   temp[i++] = s.GetAt(j++);
  s = (string)temp;
}

if( part == TRIM_RIGHT part == TRIM_BOTH )
{
  j = s.Len() - 1;
  while( s.GetAt(j) == '' '' )
   j--;
  for( i = 0 ; i <= j ; i++ )
   temp[i] = s.GetAt(i);
  temp[i] = 0;
  s = (string)temp;
}
return s;
}
//
//字符串左部長度為sublen的子串
string string::Left( int sublen )
{
if( sublen > len )
  sublen = len;
char *substr = new char(sublen+1);
for( int i = 0 ; i < sublen ; i++ )
  substr[i] = str[i];
substr[sublen] = 0;
string sub(substr);
return sub;
}
//
//字符串右部長度為sublen的子串
string string::Right( int sublen )
{
if( sublen > len )
  sublen = len;
char *substr = new char(sublen+1);
for( int i = 0 ; i < sublen ; i++ )
  substr[i] = str[len-sublen+i];
substr[sublen] = 0;
string sub(substr);
return sub;
}
//
//字符串中間從start開始長度為sublen的子串
string string::Mid( int start , int sublen )
{
if( start > len sublen <= 0 )
{
  string sub("");
  return sub;
}

if( start + sublen > len )
  sublen = len - start;

char *substr = new char(sublen+1);
for( int i = 0 ; i < sublen ; i++ )
  substr[i] = str[start+i];
substr[sublen] = 0;
string sub(substr);
return sub;
}
//
//將字符串中所有形如strNeedReplaced的子串替換為strReplace
void string::Replace( string strNeedReplaced , string strReplace )
{
string temp;
int start = 0;
int index = FindFirstSub( strNeedReplaced , start );
while( index >= 0 )
{
  temp = temp + Mid( start , index - start ) + strReplace;

  start = index + strNeedReplaced.Len();
  index = FindFirstSub( strNeedReplaced , start );
}

temp = temp + Right( len - start );
len = temp.Len();
str = new char(len+1);
strcpy( str , (char*)temp );
}
// string類結束
////////////////////////////////////////////////////////////

void main()
{
string str = "    a        b            c        ";

cout<<str<<""<<endl;

while( str.InStr( "  " ) )
  str.Replace( "  " , " " );

cout<<str.Trim()<<""<<endl;
}




發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 原平市| 横峰县| 米脂县| 松滋市| 浠水县| 新巴尔虎左旗| 贡山| 阿拉善左旗| 屏山县| 运城市| 葵青区| 罗平县| 云霄县| 易门县| 乐清市| 肇庆市| 阿勒泰市| 古交市| 汾阳市| 吉首市| 凯里市| 灌云县| 江源县| 清镇市| 马公市| 周至县| 囊谦县| 且末县| 礼泉县| 灌云县| 平谷区| 瓦房店市| 怀远县| 榆社县| 乐陵市| 天津市| 尚志市| 成安县| 安吉县| 新民市| 小金县|