共有回帖数 0 个
-
////////////////////////////////////////////////////////////
// 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 == 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 = s.GetAt(i);
temp = 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 = str;
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 = 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 = 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 ";
coutstr"|"endl;
while( str.InStr( " " ) )
str.Replace( " " , " " );
coutstr.Trim()"|"endl;
}
楼主 2016-10-13 15:24 回复
Copyright © 2010~2015 直线网 版权所有,All Rights Reserved.沪ICP备10039589号
意见反馈 |
关于直线 |
版权声明 |
会员须知