📄 yb_base.cpp
字号:
v+=s.SubString(0,p)+to;
s=s.SubString(p+fn,-1);
}
else
{
v+=s;
s.Clear();
}
}
}
else
{
while(!s.IsEmpty())
{
int p = s.AnsiPos(from);
if(p>=0)
{
v+=s.SubString(0,p)+to;
s=s.SubString(p+fn,-1);
}
else
{
v+=s;
s.Clear();
}
}
}
}
return v;
}
//----------------------------------------------------------------------------
TVictorString TVictorString::Left(int cnt) const
{
TVictorString v;
if(cnt>=0)
{
int n=Length();
if(n>cnt)n=cnt;
v.AllocBuf(n+1);
strncpy(v._sbuf,_sbuf,n);
v._sbuf[n]=0;
}
return v;
}
//----------------------------------------------------------------------------
TVictorString TVictorString::Right(int cnt) const
{
TVictorString v;
if(cnt>=0)
{
int Ln=Length();
int n=Ln<cnt?Ln:cnt;
v.AllocBuf(n+1);
strncpy(v._sbuf,_sbuf+Ln-n,n);
v._sbuf[n]=0;
}
return v;
}
//----------------------------------------------------------------------------
TVictorString TVictorString::SubString(int idx, int cnt) const
{
TVictorString v;
int Ln=Length()-idx;
if(Ln>=0)
{
int n=cnt<0?Ln:cnt;
v.AllocBuf(n+1);
strncpy(v._sbuf,_sbuf+idx,n);
v._sbuf[n]=0;
}
return v;
}
//----------------------------------------------------------------------------
TVictorString TVictorString::Trim(void) const
{
TVictorString s;
int nSp, Ln=Length();
for(nSp=0; nSp<Ln; nSp++)
if((_sbuf[nSp]!=0x20)&&(_sbuf[nSp]!=0x0d)&&(_sbuf[nSp]!=0x0a)&&(_sbuf[nSp]!=0x09))
break;
for(; Ln>nSp; Ln--)
if((_sbuf[Ln-1]!=0x20)&&(_sbuf[Ln-1]!=0x0d)&&(_sbuf[Ln-1]!=0x0a)&&(_sbuf[Ln-1]!=0x09))
break;
s.AllocBuf(Ln-nSp+1);
strncpy(s._sbuf,_sbuf+nSp,Ln-nSp);
s._sbuf[Ln-nSp]=0;
return s;
}
//----------------------------------------------------------------------------
TVictorString TVictorString::TrimLeft(void) const
{
int nSp, Ln=Length();
for(nSp=0; nSp<Ln; nSp++)
if((_sbuf[nSp]!=0x20)&&(_sbuf[nSp]!=0x0d)&&(_sbuf[nSp]!=0x0a)&&(_sbuf[nSp]!=0x09))
break;
return TVictorString(_sbuf+nSp);
}
//----------------------------------------------------------------------------
TVictorString TVictorString::TrimRight(void) const
{
TVictorString s;
int Ln=Length();
for(; Ln>0; Ln--)
if((_sbuf[Ln-1]!=0x20)&&(_sbuf[Ln-1]!=0x0d)&&(_sbuf[Ln-1]!=0x0a)&&(_sbuf[Ln-1]!=0x09))
break;
s.AllocBuf(Ln+1);
strncpy(s._sbuf,_sbuf,Ln);
s._sbuf[Ln]=0;
return s;
}
//----------------------------------------------------------------------------
bool TVictorString::CharIsChinese(int n) const //第 n 個字是否為漢字
{
if(IsLeadByte(n) && IsTrailByte(n+1))
{
TVictorWideString ws = SubString(n,2);
return ws.CharIsChinese(0);
}
return false;
}
//----------------------------------------------------------------------------
int TVictorString::CharStrokeCount(int n) const //第 n 個字的筆劃數
{
if(IsLeadByte(n) && IsTrailByte(n+1))
{
TVictorWideString ws = SubString(n,2);
return ws.CharStrokeCount(0);
}
return 0;
}
//----------------------------------------------------------------------------
TVictorString TVictorString::CharBopomofo(int n) const //第 n 個字的註音『ㄅㄆㄇㄈ』
{
TVictorString v;
if(IsLeadByte(n) && IsTrailByte(n+1))
{
TVictorWideString ws = SubString(n,2);
v = ws.CharBopomofo(0);
}
return v;
}
//----------------------------------------------------------------------------
TVictorString TVictorString::CharPinyin(int n) const //第 n 個字的拼音 "Abcd"
{
TVictorString v;
if(IsLeadByte(n) && IsTrailByte(n+1))
{
TVictorWideString ws = SubString(n,2);
v = ws.CharPinyin(0);
}
return v;
}
//----------------------------------------------------------------------------
TVictorString TVictorString::Bopomofo(void) const //註音『ㄅㄆㄇㄈ』字串
{
TVictorString v = TVictorWideString(*this).Bopomofo();
return v;
}
//----------------------------------------------------------------------------
TVictorString TVictorString::Pinyin(void) const //拼音 "Abcd" 字串
{
TVictorString v = TVictorWideString(*this).Pinyin();
return v;
}
//----------------------------------------------------------------------------
bool TVictorString::operator == (const TVictorString &s) const
{
TVictorWideString ws1(*this), ws2(s);
return ws1 == ws2;
}
//----------------------------------------------------------------------------
bool TVictorString::operator != (const TVictorString &s) const
{
TVictorWideString ws1(*this), ws2(s);
return ws1 != ws2;
}
//----------------------------------------------------------------------------
bool TVictorString::operator < (const TVictorString &s) const
{
TVictorWideString ws1(*this), ws2(s);
return ws1 < ws2;
}
//----------------------------------------------------------------------------
bool TVictorString::operator > (const TVictorString &s) const
{
TVictorWideString ws1(*this), ws2(s);
return ws1 > ws2;
}
//----------------------------------------------------------------------------
bool TVictorString::operator <= (const TVictorString &s) const
{
TVictorWideString ws1(*this), ws2(s);
return ws1 <= ws2;
}
//----------------------------------------------------------------------------
bool TVictorString::operator >= (const TVictorString &s) const
{
TVictorWideString ws1(*this), ws2(s);
return ws1 >= ws2;
}
//----------------------------------------------------------------------------
bool TVictorString::operator == (const char *s) const
{
TVictorWideString ws1(*this), ws2(s);
return ws1 == ws2;
}
//----------------------------------------------------------------------------
bool TVictorString::operator != (const char *s) const
{
TVictorWideString ws1(*this), ws2(s);
return ws1 != ws2;
}
//----------------------------------------------------------------------------
bool TVictorString::operator < (const char *s) const
{
TVictorWideString ws1(*this), ws2(s);
return ws1 < ws2;
}
//----------------------------------------------------------------------------
bool TVictorString::operator > (const char *s) const
{
TVictorWideString ws1(*this), ws2(s);
return ws1 > ws2;
}
//----------------------------------------------------------------------------
bool TVictorString::operator <= (const char *s) const
{
TVictorWideString ws1(*this), ws2(s);
return ws1 <= ws2;
}
//----------------------------------------------------------------------------
bool TVictorString::operator >= (const char *s) const
{
TVictorWideString ws1(*this), ws2(s);
return ws1 >= ws2;
}
//----------------------------------------------------------------------------
int TVictorString::operator - (const TVictorString &s) const
{
TVictorWideString ws1(*this), ws2(s);
return ws1 - ws2;
}
//----------------------------------------------------------------------------
int TVictorString::operator - (const char *s) const
{
TVictorWideString ws1(*this), ws2(s);
return ws1 - ws2;
}
//----------------------------------------------------------------------------
int operator - (const char *s1, const TVictorString &s2)
{
TVictorWideString ws1(s1), ws2(s2);
return ws1 - ws2;
}
//////////////////////////////////////////////////////////////////////////////
//----------------------------------------------------------------------------
TVictorWideString::TVictorWideString()
{
_wsbuf=NULL;
_nBufSize=0;
_Locale=&_SysLocale;
Clear();
}
//----------------------------------------------------------------------------
TVictorWideString::TVictorWideString(const wchar_t *s)
{
_wsbuf=NULL;
_nBufSize=0;
_Locale=&_SysLocale;
Assign(s);
}
//----------------------------------------------------------------------------
TVictorWideString::TVictorWideString(const char *ws)
{
_wsbuf=NULL;
_nBufSize=0;
_Locale=&_SysLocale;
Assign(ws);
}
//----------------------------------------------------------------------------
TVictorWideString::TVictorWideString(const TVictorWideString &s)
{
_wsbuf=NULL;
_nBufSize=0;
_Locale=&_SysLocale;
Assign(s);
}
//----------------------------------------------------------------------------
TVictorWideString::TVictorWideString(const TVictorString &s)
{
_wsbuf=NULL;
_nBufSize=0;
_Locale=&_SysLocale;
Assign(s);
}
//----------------------------------------------------------------------------
TVictorWideString::TVictorWideString(const WideString &s)
{
_wsbuf=NULL;
_nBufSize=0;
_Locale=&_SysLocale;
Assign(s.c_bstr());
}
//----------------------------------------------------------------------------
TVictorWideString::TVictorWideString(const AnsiString &s)
{
_wsbuf=NULL;
_nBufSize=0;
_Locale=&_SysLocale;
Assign(s.c_str());
}
//----------------------------------------------------------------------------
TVictorWideString::~TVictorWideString()
{
if(_wsbuf)
{
delete[] _wsbuf;
_wsbuf = NULL;
_nBufSize=0;
}
SetLocale(NULL);
}
//----------------------------------------------------------------------------
void TVictorWideString::Clear(void)
{
AllocBuf(1);
_wsbuf[0]=0;
}
//----------------------------------------------------------------------------
void TVictorWideString::AllocBuf(const int nSize)
{
int ns=nSize>1?nSize:1;
if(ns!=_nBufSize)
{
if(_wsbuf)
{
delete[] _wsbuf;
}
_wsbuf = new wchar_t[ns];
_nBufSize = ns;
}
}
//----------------------------------------------------------------------------
void TVictorWideString::SetLocale(TStringLocale *lc)
{
if((lc) && (lc!=&_SysLocale))
{
if(_Locale==&_SysLocale)
_Locale = new TStringLocale(*lc);
else
_Locale->SetLangID(lc->GetLangID());
}
else
{
if(_Locale!=&_SysLocale)
{
delete _Locale;
_Locale=&_SysLocale;
}
}
}
//----------------------------------------------------------------------------
void TVictorWideString::Assign(const wchar_t *s)
{
if(s)
{
AllocBuf(wcslen(s)+1);
wcscpy(_wsbuf,s);
}
else
{
Clear();
}
}
//----------------------------------------------------------------------------
void TVictorWideString::Assign(const char *s)
{
int BufSize = MultiByteToWideChar(_Locale->GetCodePage(),0,s,-1,NULL,0);
if(BufSize>0)
{
AllocBuf(BufSize);
MultiByteToWideChar(_Locale->GetCodePage(),0,s,-1,_wsbuf,BufSize);
}
else
{
Clear();
}
}
//----------------------------------------------------------------------------
void TVictorWideString::Assign(const TVictorWideString &s)
{
SetLocale(s.Locale);
Assign(s._wsbuf);
}
//----------------------------------------------------------------------------
void TVictorWideString::Assign(const TVictorString &s)
{
SetLocale(s.Locale);
Assign(s.c_str());
}
//----------------------------------------------------------------------------
TVictorWideString::operator AnsiString() const
{
TVictorString s(_wsbuf);
return AnsiString(s.c_str());
}
//----------------------------------------------------------------------------
TVictorWideString::operator WideString() const
{
return WideString(_wsbuf);
}
//----------------------------------------------------------------------------
TVictorWideString &TVictorWideString::operator += (const TVictorWideString &s)
{
*this = *this + s;
return *this;
}
//----------------------------------------------------------------------------
TVictorWideString TVictorWideString::operator + (const TVictorWideString &s) const
{
TVictorWideString v;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -