1 #ifndef __STRINGS_HPP__     2 #define __STRINGS_HPP__    56 #if defined(_UNICODE) || defined(UNICODE)    57     #define AddSlashes AddSlashesW    58     #define AddCSlashes AddCSlashesW    60     #define AddSlashes AddSlashesA    61     #define AddCSlashes AddCSlashesA    82 template < 
typename _ChTy, 
typename _IndexType >
    85     std::vector<_IndexType> next( sublen + 1 );
    90         if ( k == -1 || substr[j] == substr[k] )
    94             if ( substr[j] != substr[k] )
   108 template < 
typename _ChTy, 
typename _IndexType >
   109 inline static int _Templ_KmpMatchEx( _ChTy 
const * str, 
int len, _ChTy 
const * substr, 
int sublen, 
int pos, std::vector<_IndexType> 
const & next )
   114     while ( i < len && j < sublen )
   116         if ( j == -1 || str[i] == substr[j] )
   126     return j == sublen ? i - sublen : -1;
   130 template < 
typename _ChTy, 
typename _IndexType >
   131 inline static int _Templ_KmpMatch( _ChTy 
const * str, 
int len, _ChTy 
const * substr, 
int sublen, 
int pos )
   133     return _Templ_KmpMatchEx<_ChTy, _IndexType>( str, len, substr, sublen, pos, 
_Templ_KmpCalcNext( substr, sublen ) );
   139 WINUX_FUNC_DECL(
int) 
KmpMatchEx( 
char const * str, 
int len, 
char const * substr, 
int sublen, 
int pos, std::vector<int> 
const & next );
   148     std::ostringstream * _sout;
   160     template < 
typename _AnyType >
   163         assert( _sout != NULL );
   204     void init( 
StringArray const & matches, ReplaceFuncType replaceFunc, 
void * extra = NULL );
   207     int addMatchReplacePair( 
String const & match, 
String const & replace );
   209     int addMatch( 
String const & match );
   211     ReplaceFuncType setReplaceFunc( ReplaceFuncType newReplaceFunc, 
void * extra = NULL );
   227     String const & getMatchItem( 
int item ) 
const;
   228     String getReplaceItem( 
int item ) 
const;
   229     void setReplaceItem( 
int item, 
String const & replace );
   233     std::vector<KmpNextValueArray> _nextVals;
   236     ReplaceFuncType _replaceFunc;
   247     static void Set( 
char const * lc ) { _clsLc = lc; }
   248     static char const * 
Get() { 
return _clsLc.c_str(); }
   282     enum { szCharInput, szWCharInput } _type;
   285     explicit SZInput( 
char * psz, 
size_t count ) : _psz(psz), _type(szCharInput), _count(count) { }
   286     explicit SZInput( 
wchar_t * pwsz, 
size_t count ) : _pwsz(pwsz), _type(szWCharInput), _count(count) { }
   287     SZInput & operator = ( 
char const * pstr );
   288     SZInput & operator = ( 
wchar_t const * pwstr );
   292 #if defined(__GNUC__) || _MSC_VER >= 1600   294 template < 
typename _CHAR, u
int _N >
   302 #define SZ(sz) SZInput( sz, sizeof(sz) / sizeof(sz[0]) )   314     Conv( 
char const * fromCode, 
char const * toCode );
   323     int convert( 
char const * srcBuf, 
size_t srcSize, 
char * * destBuf );
   329     template < 
typename _RetString, 
typename _String >
   332         typename _RetString::pointer buf;
   333         size_t outBytes = this->convert( (
char *)str.c_str(), (str.length() + 1) * 
sizeof(
typename _String::value_type), (
char **)&buf );
   334         _RetString s = (
typename _RetString::pointer)buf;
   345 template < 
typename _ToString >
   355         return this->Conv::convert<_ToString, AnsiString>(str);
   360         typename _ToString::value_type * buf;
   361         Conv::convert( (
char *)str.c_str(), (str.length() + 1) * 
sizeof(
typename AnsiString::value_type), (
char **)&buf );
   369 template < 
typename _FromString >
   379         return this->Conv::convert<AnsiString, _FromString>(str);
   384         AnsiString::value_type * buf;
   385         Conv::convert( (
char *)str.c_str(), (str.length() + 1) * 
sizeof(
typename _FromString::value_type), (
char **)&buf );
   402 #endif // __STRINGS_HPP__ 
static int _Templ_KmpMatchEx(_ChTy const *str, int len, _ChTy const *substr, int sublen, int pos, std::vector< _IndexType > const &next)
KMP匹配算法 传入已经求好的next进行匹配 
 
ConvTo(char const *toCode)
 
AnsiString AddCSlashesA(AnsiString const &str)
 
UnicodeString AddSlashesW(UnicodeString const &str, UnicodeString const &charlist)
 
String StrLower(String const &str)
 
LocalString StringToLocal(String const &str)
 
uint UnicodeMinLength(UnicodeString const &unicode)
返回一个unicode字符串转换为多字节字符串最少需要多少字节(by local CodePage),用于wcstombs ...
 
std::basic_string< char > AnsiString
 
String & StrMakeLower(String *str)
使字符串小写 
 
String & StrMakeReplace(String *str, String const &findText, String const &replaceText, String::size_type offset=0)
使字符串全文替换 
 
int markpos
标记,表示进行到这个位置了,该从这个位置开始 
 
int StrSplit(String const &str, String const &delimList, StringArray *arr, bool alwaysRetOneElem=false)
字符串分割 
 
int KmpMatchEx(char const *str, int len, char const *substr, int sublen, int pos, std::vector< int > const &next)
KMP字符串匹配算法 传入已经求好的next进行匹配 
 
String & StrMakeUpper(String *str)
使字符串大写 
 
MatchResult search(String const &str, int offset=0) const 
搜索任意一项匹配(KMP) 
 
std::vector< int > KmpCalcNext(char const *substr, int sublen)
KMP字符串匹配算法 求子串next值 
 
WINUX_DLL String FormatEx(uint cch, tchar const *fmt,...)
 
AnsiString convert(_FromString const &str)
 
std::ostream & operator<<(std::ostream &o, ConsoleAttrT< _VarType > const &tr)
 
_ToString convert(AnsiString const &str)
 
#define DISABLE_OBJECT_COPY(clsname)
 
AnsiString LocalFromUtf8(AnsiString const &str)
从utf-8转到本地编码 
 
int StrSplit2(String const &str, String const &delim, StringArray *arr, bool alwaysRetOneElem=false)
字符串分割2 
 
std::vector< String > StringArray
 
SZInput SZ(_CHAR(&sz)[_N])
 
AnsiString StripSlashes(AnsiString const &str, AnsiString const &charlist)
反斜杠操作 
 
int KmpMatch(char const *str, int len, char const *substr, int sublen, int pos)
KMP字符串匹配算法 匹配 
 
std::vector< MatchState > MatchStates
 
static int _Templ_KmpMatch(_ChTy const *str, int len, _ChTy const *substr, int sublen, int pos)
KMP匹配算法 匹配 
 
String LocalToString(LocalString const &local)
兼容字符串与Unicode,Local字符串相互转换 
 
ConvFrom(char const *fromCode)
 
String StrInsert(String const &str, int start, int end, String const &insert)
在指定位置插入字符串 
 
static std::vector< _IndexType > _Templ_KmpCalcNext(_ChTy const *substr, int sublen)
KMP匹配算法 求子串next值 
 
String StrJoin(String const &delim, StringArray const &arr)
字符串组合连接 
 
AnsiString AddSlashesA(AnsiString const &str, AnsiString const &charlist)
反斜杠操作 
 
#define WINUX_FUNC_DECL(ret)
 
UnicodeString AddCSlashesW(UnicodeString const &str)
 
String AddQuotes(String const &str, tchar quote= '\"' )
double引号 
 
static void Set(char const *lc)
 
static char const * Get()
 
uint LocalCharsCount(LocalString const &local)
返回一个本地字符串里有多少个实际的字符(by local CodePage),用于mbstowcs 
 
_RetString convert(_String const &str)
进行编码转换 
 
std::vector< short > KmpNextValueArray
 
WINUX_DLL String FormatExV(uint cch, tchar const *fmt, va_list args)
格式化字符串 
 
WINUX_DLL String Format(tchar const *fmt,...)
 
UnicodeString LocalToUnicode(LocalString const &local)
本地Ansi转到Unicode 
 
bool StrGetLine(String *line, String const &str, int *i, String *nl=NULL)
获取字符串中的一行,支持unix,windows,mac平台的行分隔方式 line 不包含换行符,i 指示起始位置,并获得处...
 
UnicodeString StringToUnicode(String const &str)
 
String StrTrim(String const &str)
祛除字符串首尾出现的空白字符 
 
String UnicodeToString(UnicodeString const &unicode)
 
AnsiString StripCSlashes(AnsiString const &str)
 
用来使得String能够用operator<<来赋值 
 
std::basic_string< tchar > String
 
std::basic_string< wchar > UnicodeString
 
LocalString UnicodeToLocal(UnicodeString const &unicode)
Unicode转换到本地Ansi. 
 
int convert(char const *srcBuf, size_t srcSize, char **destBuf)
进行编码转换 
 
String StrUpper(String const &str)
 
AnsiString LocalToUtf8(AnsiString const &str)
从本地编码转到utf-8