使用c++实现Format函数
2003-09-26 22:57
966 查看
前几日用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;
}
__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;
}
相关文章推荐
- SIP协议解析与实现(c和c++使用osip) 2
- [语音合成技术第四讲]使用C++实现语音识别
- C++--如何实现SDI程序使用CSplitterWnd创建的多个视图的动态地显示和关闭视图
- C++--如何实现SDI程序使用CSplitterWnd创建的多个视图的动态地显示和关闭视图
- 使用SWIG实现C/C++与其他语言间的互相调用 zz
- C++--如何实现SDI程序使用CSplitterWnd创建的多个视图的动态地显示和关闭视图
- 在C++中使用事件回调机制(通过Observer模式、函数指针等实现)
- C++--如何实现SDI程序使用CSplitterWnd创建的多个视图的动态地显示和关闭视图
- SIP协议解析与实现(c和c++ 使用osip) 10
- SIP协议解析与实现(c和c++ 使用osip) 8
- 使用c++的成员指针实现类似Borland VCL组件的事件回调
- SIP协议解析与实现(c和c++ 使用osip) 12
- gabor 滤波的c++实现与该类得使用简介
- 使用__cplusplus实现C/C++互调
- 使用C++/CLI泛型实现ORM
- SIP协议解析与实现(c和c++ 使用osip) 11
- 使用c++实现事件注册
- SIP协议解析与实现(c和c++使用osip) 7
- SIP协议解析与实现(c和c++使用osip) 1
- 使用SWIG实现C/C++与其他语言间的互相调用