//字符分割
class StrDiv
{
public:
static CHAR * SetString(const CHAR *tString,const CHAR *tSplit);
static CHAR * GetNextString();
static string inString;
static CHAR* outString;
static string inSplit;
static CHAR * tempString;
};
//字符分割
string StrDiv::inString = "";
CHAR* StrDiv::outString = NULL;
string StrDiv::inSplit = "";
CHAR* StrDiv::tempString = NULL;
CHAR * StrDiv::SetString(const CHAR *tString,const CHAR *tSplit)
{
inString = tString;
outString = NULL;
inSplit = tSplit;
tempString = NULL;
outString = STRTOKS(const_cast<CHAR *>(inString.c_str()),inSplit.c_str(),&tempString);
return outString;
}
CHAR * StrDiv::GetNextString()
{
outString = STRTOKS(NULL,inSplit.c_str(),&tempString);
return outString;
}
/*
*/
/*************************************************
Function: FromStrGetValue
Description:
从字符串中根据分割符分割出整数
Calls:
Called By:
Input:
tString 源字符串
tSplit 切割符
Function 转换函数
First 保存开始位置
MaxSize 最大长度
Return:
INT 保存到数组的个数
Others:
例子:
vector<INT> a;
INT b[20];
FromStrGetValue("123,456,789",",",bind2nd(ptr_fun(ATOI),0),back_inserter(a),10);
FromStrGetValue("123,456,789",",",bind2nd(ptr_fun(ATOI),0),insert_iterator<VECTOR_INT >(a,a.end()),10);
FromStrGetValue("123,456,789",",",bind2nd(ptr_fun(ATOI),0),b,10);
vector<string> s;
FromStrGetValue("123,456,789",",|",ReturnOriginal<string>,back_inserter(s),100);
最好用 insert_iterator 因为不是每种容器都有puch_back() push_front() 而insert() 基本上都有
*************************************************/
template<typename _Tst,typename _Fun> inline
INT FromStrGetValue(const CHAR *tString,const CHAR *tSplit,_Fun Function,_Tst First,INT MaxSize=0)
{
//_DEBUG_RANGE(First, last);
INT tNumSize = 0;
INT nSize = MaxSize;
if (nSize <1 ) return tNumSize;
CHAR *element = StrDiv::SetString(tString,tSplit);
_Tst OperatNum = First;
while (nSize>=1 && element)
{
//if (OperatNum == NULL) return tNumSize;
*OperatNum = Function(element);
element = StrDiv::GetNextString();
nSize--;
OperatNum++;
tNumSize++;
}
return tNumSize;
}
字符切割
猜你喜欢
转载自blog.csdn.net/seanbill/article/details/80196587
今日推荐
周排行