⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 yb_base.cpp

📁 简单实用, 功能强大的 C++ Builder 串口控件! 本控件是免费的, 不需要注册, 有关授权及许可协议详见 license.txt 文件。 1.支持二进制数据和文本数据的收发 2.支
💻 CPP
📖 第 1 页 / 共 5 页
字号:
              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 + -