From e0c2a28567a6825394dda0dca858aaa59db582c7 Mon Sep 17 00:00:00 2001 From: hyzboy Date: Sun, 19 Jan 2020 13:13:48 +0800 Subject: [PATCH] add multi "strechar" functions,"BaseString::FindExcludeChar" functions. --- inc/hgl/type/BaseString.h | 50 ++++++++++++++++++++++++--- inc/hgl/type/StrChar.h | 72 +++++++++++++++++++++++++++++++++++++-- 2 files changed, 116 insertions(+), 6 deletions(-) diff --git a/inc/hgl/type/BaseString.h b/inc/hgl/type/BaseString.h index 2934b5a..5b8f454 100644 --- a/inc/hgl/type/BaseString.h +++ b/inc/hgl/type/BaseString.h @@ -870,12 +870,14 @@ namespace hgl return(-1); } + int FindChar(const T ch)const{return FindChar(0,ch);} ///<返回当前字符串中指定字符开始的索引(从左至右) + /** * 在当前字符串中查找字符 * @param pos 起始查找位置 * @param ch 要查找的字符,可以是多个,找到任意一个就算 */ - int FindChar(int pos,const BaseString &ch)const ///<返回当前字符串中指定字符中的任意一个开始的索引(从左至右) + int FindChar(int pos,const BaseString &ch)const ///<返回当前字符串中指定字符(多个任选一)的索引(从左至右) { if(!data.valid()) return(-1); @@ -888,7 +890,7 @@ namespace hgl return(-1); } - int FindChar(const T ch)const{return FindChar(0,ch);} ///<返回当前字符串中指定字符开始的索引(从左至右) + int FindChar(const BaseString &ch)const{return FindChar(0,ch);} ///<返回当前字符串中指定字符(多个任选一)的索引(从左至右) int FindRightChar(const T ch)const ///<返回当前字符串中指定字符开始的索引(从右至左) { @@ -903,7 +905,7 @@ namespace hgl return(-1); } - int FindRightChar(const BaseString &ch)const ///<返回当前字符串中指定字符开始的索引(从右至左) + int FindRightChar(const BaseString &ch)const ///<返回当前字符串中指定字符(多个任选一)开始的索引(从右至左) { if(!data.valid()) return(-1); @@ -935,7 +937,7 @@ namespace hgl } /** - * 返回当前字符串中指定字符开始的索引(从右至左) + * 返回当前字符串中指定字符(多个任选一)开始的索引(从右至左) * @param off 从右至左跳过不查的字符个数 * @param ch 要查找的字符 */ @@ -952,6 +954,46 @@ namespace hgl return(-1); } + /** + * 返回当前字符串中排除指定字符外的第一个字符的索引 + * @param pos 起始查找位置 + * @param ch 要排除的字符 + */ + int FindExcludeChar(const int pos,const T &ch)const + { + if(!data.valid()) + return(-1); + + const T *result=hgl::strechr(data->c_str()+pos,ch); + + if(result) + return result-(data->c_str()+pos); + + return(-1); + } + + int FindExcludeChar(const T &ch)const{return FindExcludeChar(ch);} + + /** + * 返回当前字符串中排除指定字符外的第一个字符的索引 + * @param pos 起始查找位置 + * @param ch 要排除的字符 + */ + int FindExcludeChar(const int pos,const BaseString &ch)const + { + if(!data.valid()) + return(-1); + + const T *result=hgl::strechr(data->c_str()+pos,ch.c_str(),ch.Length()); + + if(result) + return result-(data->c_str()+pos); + + return(-1); + } + + int FindExcludeChar(const BaseString &ch){return FindExcludeChar(0,ch);} + /** * 在整个字符串内,查找指定字符串 * @param str 要查找的字符串 diff --git a/inc/hgl/type/StrChar.h b/inc/hgl/type/StrChar.h index 614ed47..930ca2c 100644 --- a/inc/hgl/type/StrChar.h +++ b/inc/hgl/type/StrChar.h @@ -567,7 +567,7 @@ namespace hgl } /** - * 在字符串中查找某个字符,指定字符串最大长度 + * 在字符串中查找多个字符中的任意一个,指定字符串最大长度 * @param str 字符串 * @param ch 字符 * @param n 字符串长度 @@ -590,7 +590,7 @@ namespace hgl } /** - * 在字符串中查找某个字符 + * 在字符串中查找多个字符中的任意一个 * @param str 字符串 * @param ch 字符列表 * @param ch_count 字符个数 @@ -612,6 +612,74 @@ namespace hgl return(nullptr); } + /** + * 在字符串中查找排除指定字符外的第一个字符 + * @param str 字符串 + * @param ch 要排除的字符 + * @return 查找到的位置指针 + */ + template + TS *strechr(TS *str,TC ch) + { + if(!str||!(*str)||ch==0)return(nullptr); + + while(*str) + { + if(*str!=ch) + return(str); + else + ++str; + } + + return(nullptr); + } + + /** + * 在字符串中查找排除指定字符外的第一个字符,指定字符串最大长度 + * @param str 字符串 + * @param ch 要排除的字符 + * @param n 字符串长度 + * @return 查找到的位置指针 + */ + template + TS *strechr(TS *str,TC ch,int n) + { + if(!str||!(*str)||ch==0||n<=0)return(nullptr); + + while(*str&&n--) + { + if(*str!=ch) + return(str); + else + ++str; + } + + return(nullptr); + } + + /** + * 在字符串中查找在字符串中查找排除指定字符外的第一个字符 + * @param str 字符串 + * @param ch 要排除的字符列表 + * @param ch_count 字符个数 + * @return 查找到的位置指针 + */ + template + TS *strechr(TS *str,TC *ch,const int ch_count) + { + if(!str||!(*str)||!ch||!(*ch)||ch_count<=0)return(nullptr); + + while(*str) + { + if(!strchr(ch,*str,ch_count)) + return(str); + + ++str; + } + + return(nullptr); + } + /** * 在字符串中从结尾处开始查找某个字符 * @param str 字符串