add multi "strechar" functions,"BaseString::FindExcludeChar" functions.

This commit is contained in:
2020-01-19 13:13:48 +08:00
parent 43e8db0b61
commit e0c2a28567
2 changed files with 116 additions and 6 deletions

View File

@@ -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<T> &ch)const ///<返回当前字符串中指定字符中的任意一个开始的索引(从左至右)
int FindChar(int pos,const BaseString<T> &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<T> &ch)const{return FindChar(0,ch);} ///<返回当前字符串中指定字符(多个任选一)的索引(从左至右)
int FindRightChar(const T ch)const ///<返回当前字符串中指定字符开始的索引(从右至左)
{
@@ -903,7 +905,7 @@ namespace hgl
return(-1);
}
int FindRightChar(const BaseString<T> &ch)const ///<返回当前字符串中指定字符开始的索引(从右至左)
int FindRightChar(const BaseString<T> &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<T> &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 要查找的字符串

View File

@@ -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<typename TS,typename TC>
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<typename TS,typename TC>
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<typename TS,typename TC>
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 字符串