使用c++实现Format函数

类别:VC语言 点击:0 评论:0 推荐:

前几日用bcb,发现它有个函数是Format,可以直接返回字符串,感觉非常好用,小我略想了一下,呵呵,用vc写了个相同功能的函数,代码很简单,仅供大家参考:

  __inline bool TrimRight(LPTSTR d)
  {
   if(d==NULL)
    return false;
   
   LPTSTR pstr=NULL;
   char* p=d;
   while(*p!='\0')
   {
    if(_istspace(*p)&&
     pstr==NULL)
    {
     pstr=p;
    }
    else
     pstr=NULL;
    p=_tcsinc(p);
   }
   if(pstr!=NULL)
   {
    *pstr='\0';
   }
   return true;
   
  }
  
  __inline bool TrimLeft(LPTSTR d)
  {
   if(d==NULL)
    return false;
   LPTSTR pstr=NULL;
   char* p=d;
   while(*p!='\0')
   {
    if(!_istspace(*p))
    {
     if(pstr==NULL)
     {
      pstr=p;
      break;
     }
     
    }
    p=_tcsinc(p);
    
   }
   if(pstr!=NULL&&
    pstr!=d)
   {
    MoveMemory(d,pstr,lstrlen(pstr));
   }
   return true;
  }
  
  
  struct fstring
  {
  public:
   fstring()
   {
    memset(str,0,sizeof(TCHAR)*5024);
   }

   fstring(char* src)
   {
    memset(str,0,sizeof(TCHAR)*5024);
    lstrcpy(str,src);
   }

   fstring(const char* src)
   {
    memset(str,0,sizeof(TCHAR)*5024);
    lstrcpy(str,src);
   }

   fstring(fstring& src)
   {
    memset(str,0,sizeof(TCHAR)*5024);
    lstrcpy(str,src.str);
   }
   
   bool CopyFromBuffer(PBYTE pBuf,UINT nSize)
   {
    if(nSize+1>5024)
     return false;
    memset(str,0,sizeof(TCHAR)*5024);
    CopyMemory(str,pBuf,nSize);
    str[nSize+1]='\0';
    return true;
    
   }
   
   bool TrimLeft()
   {
    return __farfhy::string::TrimLeft(str);
   }
   
   bool TrimRight()
   {
    return __farfhy::string::TrimRight(str);
   }

   bool EmptyBuffer()
   {
    memset(str,0,5024);
    return true;
   }

   bool ReadStrFromList(LPTSTR dst)
   {
    return __farfhy::string::ReadStrFromList(dst,str);
   }
   
   fstring& Format(LPCTSTR lpszText,...)
   {
    va_list list;
    va_start(list,lpszText);
    memset(str,0,5024);
    Format(lpszText,list);
    va_end(list);
    return *this;
   }

   fstring& operator=(LPCTSTR src);
   fstring& operator=(char* src);
   fstring& operator=(const fstring s);
   __inline operator char*( );
   __inline operator const char*();
   friend __inline fstring Format(LPCTSTR lpszText,...);
   
  private:
   fstring& Format(LPTSTR lpszText,va_list& list)
   {
    memset(str,0,sizeof(TCHAR)*5024);
    vsprintf(str,lpszText,list);
    return *this;
   }

   
   
   TCHAR str[5024];
  };
  
  
  fstring::operator char *()
  {
   return str;
  }
  
  fstring::operator const char *()
  {
   
   return str;
  }
  
  __inline fstring Format(LPCTSTR lpszText,...)
  {
   fstring fs;
   va_list list;
   va_start(list,lpszText);
   char teststr[5024],str[5024];
   memset(str,0,5024);
   memset(teststr,0,5024);
   sprintf(teststr,"%s\n",lpszText);
   fs.Format(teststr,list);
   va_end(list);
   return fs;
  }

本文地址:http://com.8s8s.com/it/it1465.htm