在实际开发过程中,C++string类使用起来有很多不方便的地方,笔者根据根据这些不足简单的扩展了这个类,如增加与数字之间的相互转化和格式化字符串。不足的地方望指正。读者也可以根据自己需求继续扩展。
头文件:exstring.h
/*
Author: wuqiang
Email: debugroot@126.com
Description:exstring is a subclass of basic_string.It is added some userful
operations,such as toUpper,toLower,toNumber,fromNumber,format,etc.It can also
convert between basic_string seamlessly,which is very important for compatibility.
And it is almostly a wrapper of some C++ standard library,so there should be no bugs.
If you find some,please let me known.It is totally free,you can use it in any way you desire.
*/
#pragma once
#include <string>
#include <stdarg.h>
#include <algorithm>
#include <sstream>
#include <iomanip>
using namespace std;
#ifndef INLINE
#define INLINE inline
#endif //INLINE
static ios_base::fmtflags BaseFlag(int base)
{
return (base == 16) ? (ios_base::hex) :
( (base == 8) ? (ios_base::oct) : (ios_base::dec) );
}
template<class _Elem> struct ex_char_traits
{
};
template<> struct ex_char_traits<char>
{
static INLINE int ct_vscprintf(const char* format, va_list argptr )
{
return _vscprintf(format, argptr);
}
static INLINE int ct_vstprintf_s(char* buffer, size_t numberOfElements,
const char* format, va_list argptr)
{
return vsprintf_s(buffer, numberOfElements, format, argptr);
}
};
template<> struct ex_char_traits<wchar_t>
{
static INLINE int ct_vscprintf(const wchar_t* format, va_list argptr )
{
return _vscwprintf(format, argptr);
}
static INLINE int ct_vstprintf_s(wchar_t* buffer, size_t numberOfElements,
const wchar_t* format, va_list argptr)
{
return vswprintf_s(buffer, numberOfElements, format, argptr);
}
};
template<class _Elem, class _Traits, class _Ax, class Type>
Type ConvertToNumber(basic_stringstream<_Elem, _Traits, _Ax>& ss,
Type t, int base)
{
ss.setf(BaseFlag(base), ios_base::basefield);
ss >>