摘要:记得我刚出来的时候,还没有学DotNet呢。
那时主要是用ASP和DHTML,语言是JScript 。 本来打算重操旧业-学C++的。
不过写惯了脚本,就十分讨厌C++里操作字符串那么麻烦。所以就做了这个东西。
// JString.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#ifndef _Lostinet_class_JString_
#define _Lostinet_class_JString_
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
class JString
{
protected:
JString* pAllocator;
JString* pNext;
//只有链头才用pLast
JString* pLast;
char* pString;
int length;
JString(JString& pA,unsigned int initLen=0,const char* initStr="")
{
pAllocator=&pA;
if(pA.pLast)pA.pLast->pNext=this;
pA.pLast=this;
pNext=pLast=0;
length=initLen;
pString=new char[initLen+1];
strcpy(pString,initStr);
}
public:
JString(const char* str)
{
pAllocator=this;
pNext=pLast=0;
length=strlen(str);
pString=new char[length+1];
strcpy(pString,str);
}
JString()
{
pAllocator=this;
pNext=pLast=0;
pString=new char[1];
pString[0]=0;
length=0;
}
virtual ~JString()
{
delete pString;
if(pNext)delete pNext;
}
char* Detach()
{
char* str=pString;
pString=new char[1];
pString[0]=0;
length=0;
return str;
}
char* GetBuffer()
{
return pString;
}
char* GetBufferSetLength(int len)
{
//assert(len>=0);
delete pString;
length=len;
pString=new char[len+1];
return pString;
}
/****************************************************************/
int GetLength()
{
return length;
}
int IndexOf(const char * str,int start=0)
{
if(start+1>length)return -1;
char* pStart=pString+start;
char* pos=strstr(pStart,str);
if(pos==0)return -1;
return pos-pString;
}
int LastIndexOf(const char * str)
{
int len=strlen(str);
char *buf1=new char[length+1];
char *buf2=new char[len+1];
strcpy(buf1,pString);
strcpy(buf2,str);
strrev(buf1);
strrev(buf2);
char* pos=strstr(buf1,buf2);
delete buf1;
delete buf2;
if(pos==0)return -1;
return length+buf1-pos-len;
}
JString& Left(int len)
{
return Substr(0,len);
}
JString& Right(int len)
{
return Substr(length-len,len);
}
JString& Substr(int start,int len)
{
if(start<0)start=0;
if(start+1>length)
return * new JString(*pAllocator);
if(len<=0)
return * new JString(*pAllocator);
if(start+len>length)
len=length-start;
char* buf=new char[len+1];
memcpy(buf,pString+start,len);
buf[len]=0;
JString* pStr=new JString(*pAllocator,len,buf);
delete buf;
return * pStr;
}
JString& Lower()
{
JString* pStr=new JString(*pAllocator);
strcpy(pStr->GetBufferSetLength(length),pString);
strlwr(pStr->GetBuffer());
return......[
阅读全文]