字符切割

//字符分割
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
今日推荐